【问题标题】:Build network with shortcut using torch使用 Torch 使用快捷方式构建网络
【发布时间】:2018-01-09 11:10:35
【问题描述】:

我现在有一个包含 2 个输入 X 和 Y 的网络。

X 连接 Y,然后传递给网络以获得 result1。同时 X 将连接 result1 作为快捷方式。

如果只有一个输入就很容易了。

branch = nn.Sequential()
branch:add(....) --some layers
net = nn.Sequential()
net:add(nn.ConcatTable():add(nn.Identity()):add(branch))
net:add(...)

但是当涉及到两个输入时,我实际上不知道该怎么做?此外,不允许使用 nngraph。有人知道怎么做吗?

【问题讨论】:

  • X 是输入还是网络?
  • X 和 Y 都是输入。示例代码只有一个输入
  • X = nn.Sequential() 呢?
  • 对不起我的错误。我只是在这里复制了我的代码,它有一些名称冲突。如果输入到网络的输入是包含 X 和 Y 的表,我不知道如何只使用 X 作为快捷方式

标签: deep-learning torch


【解决方案1】:

您可以使用表格模块,看看这个页面:https://github.com/torch/nn/blob/master/doc/table.md

net = nn.Sequential()
triple = nn.ParallelTable()
duplicate = nn.ConcatTable()
duplicate:add(nn.Identity())
duplicate:add(nn.Identity())
triple:add(duplicate)
triple:add(nn.Identity())
net:add(triple)
net:add(nn.FlattenTable())
-- at this point the network transforms {X,Y} into {X,X,Y}
separate = nn.ConcatTable()
separate:add(nn.SelectTable(1))
separate:add(nn.NarrowTable(2,2))
net:add(separate)
-- now you get {X,{X,Y}}
parallel_XY = nn.ParallelTable()
parallel_XY:add(nn.Identity()) -- preserves X
parallel_XY:add(...) -- whatever you want to do from {X,Y}
net:add(parallel)
parallel_Xresult = nn.ParallelTable()
parallel_Xresult:add(...)  -- whatever you want to do from {X,result}
net:add(parallel_Xresult)

output = net:forward({X,Y})

这个想法是从{X,Y} 开始,复制X 并进行操作。这显然有点复杂,nngraph 应该是在这里做的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 2012-03-30
    相关资源
    最近更新 更多