在 lua 中使第一层 AlexNet 并行

Make first layer of AlexNet parallel in lua

我正在尝试为 Torch 中的第一层 Alexnet Lua 并行 table。我想将两批 RGB 图像传递到网络,然后将它们的相加发送到下一层。例如:假设我想将具有 6 个通道的图像发送到 alexnet 的第一层,但在这种情况下,我想将两批 3 个通道的每个发送到第一个并行层,加入它们,然后将输出发送到下一个层。 实际代码是这样的:

net = nn.Sequential()
net:add(nn.SpatialConvolution(3,96,11,11,4,4,2,2))       
net:add(nn.SpatialBatchNormalization(96))
net:add(nn.ReLU(true))
net:add(nn.SpatialMaxPooling(3,3,2,2))                   
net:add(nn.SpatialConvolution(96,256,5,5,1,1,2,2))       
net:add(nn.SpatialBatchNormalization(256))
net:add(nn.ReLU(true))
net:add(nn.SpatialMaxPooling(3,3,2,2))                   
net:add(nn.SpatialConvolution(256,384,3,3,1,1,1,1))     

我认为可行的代码是:

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)) 

我得到的错误是:

In 1 module of nn.ParallelTable: /torch/install/share/lua/5.1/cudnn/init.lua:171: assertion failed!

我想知道这个实现哪里出了问题,如有任何帮助,我们将不胜感激。

谢谢

你的错误在net:add(nn.JoinTable(1,8))行,它应该是3而不是8。这个值是你的输入张量的维度数(不把batch维度算作一个维度)。在这里你用 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())