2016-10-31 5 views
1

Как добавить новые узлы в модуль графа (gModule) в пакете nngraph в факеле? Я попытался использовать функцию добавления, и это добавило узел в слот модулей в объекте gModules. Однако вывод все еще берется из предыдущего последнего узла.Как добавить дополнительные слои в модуль графа в факеле

упрощенный код:

require "nn" 
require "nngraph" 

-- Function that builds a gModule 
function buildModule(input_size,hidden_size) 
    local x = nn.Identity()() 
    local out = x - nn.Linear(input_size,hidden_size) - nn.Tanh() 
    return nn.gModule({x},{out}) 
end 

network = buildModule(5,3) 
-- Additional layer to add 
l2 = nn.Linear(3,10) 
network:add(l2) 

-- Expected a tensor of size 10 but got one with size 3 
print(network:forward(torch.randn(5))) 

ответ

1

GModule на самом деле не должно быть мутируют. Тот факт, что он поддерживает: add на самом деле является побочным эффектом того, что он является дочерним классом nn.Container, а скорее не дизайнерским решением. В общем случае, когда вы создаете gModule, вы не должны изменять свою внутреннюю структуру, так как вам придется изменить некоторые внутренние атрибуты, чтобы сделать все, что нужно. Вместо этого - если вы хотите добавить что-то «сверху», просто определите новый контейнер, который принимает предыдущий как вход.

-- Function that builds a gModule 
function buildModule(input_size,hidden_size) 
    local x = nn.Identity()() 
    local out = x - nn.Linear(input_size,hidden_size) - nn.Tanh() 
    return nn.gModule({x},{out}) 
end 

network = buildModule(5,3) 

new_network = nn.Sequential() 
new_network:add(network) 
new_network:add(nn.Linear(3,10)) 
+0

Спасибо за ответ – nist

Смежные вопросы