我正在尝试在Torch,Lua中为Alexnet的第一层提供并行表。我想将两批RGB图像传递到网络,然后将它们添加到下一层。例如:假设我想将6个通道的图像发送到alexnet的第一层,但在这种情况下,我想将两批3个通道分别发送到第一个并行层,加入它们然后将输出发送到下一个层层。 实际代码是这样的:
net = nn.Sequential()
c = nn.ParallelTable()
c:add(nn.SpatialConvolution(3,48,11,11,4,4,2,2))
c:add(nn.SpatialConvolution(3,48,11,11,4,4,2,2))
net:add(c)
net:add(nn.JoinTable(1,8))
net:add(nn.SpatialBatchNormalization(96))
net:add(nn.ReLU(true))
net:add(nn.SpatialMaxPooling(3,3,2,2))
我认为可行的代码是:
def departments_for_select
Rails.cache.fetch("departments_for_select_#{session[:user_id]}", expires_in: 5.minutes) do
Department.for_select(super_admin? ? nil : session[:user_id])
end
end
我得到的错误是:
在nn.ParallelTable的1个模块中: /torch/install/share/lua/5.1/cudnn/init.lua:171:断言失败了!
我想知道这个实现在哪里出错了,我们非常感谢任何帮助。
由于
答案 0 :(得分:0)
您的错误在net:add(nn.JoinTable(1,8))
行,它应该是3而不是8.此值是输入张量的维度数(不计算维度的维度)。在这里,您可以使用3D图像为网络提供信息,然后编写net:add(nn.JoinTable(1,3))
我使用了以下代码,一切顺利
require 'nn'
require 'cutorch'
require 'cunn'
require 'cudnn'
net = nn.Sequential()
c = nn.ParallelTable()
c:add(nn.SpatialConvolution(3,48,11,11,4,4,2,2))
c:add(nn.SpatialConvolution(3,48,11,11,4,4,2,2))
net:add(c)
net:add(nn.JoinTable(1,3))
net:add(nn.SpatialBatchNormalization(96))
net:add(nn.ReLU(true))
net:add(nn.SpatialMaxPooling(3,3,2,2))
net:cuda()
input1 = torch.rand(128,3,227, 227):cuda()
input2 = torch.rand(128,3,227,227):cuda()
out = net:forward({input1, input2})
print(out:size())