使AlexNet的第一层在lua中平行

使AlexNet的第一层在lua中平行,lua,parallel-processing,deep-learning,layer,torch,Lua,Parallel Processing,Deep Learning,Layer,Torch,我正试图为卢阿火炬的第一层亚历克斯内特准备一张平行的桌子。我想将两批RGB图像传递到网络,然后将添加的图像发送到下一层。例如:假设我想将带有6个通道的图像发送到alexnet的第一层,但在本例中,我想将两批3个通道分别发送到第一个并行层,将它们连接起来,然后将输出发送到下一层。 实际代码如下所示: net = nn.Sequential() net:add(nn.SpatialConvolution(3,96,11,11,4,4,2,2)) net:add(nn.SpatialBa

我正试图为卢阿火炬的第一层亚历克斯内特准备一张平行的桌子。我想将两批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)) 
我得到的错误是:

在nn.ParallelTable的1个模块中: /torch/install/share/lua/5.1/cudnn/init.lua:171:断言失败

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


谢谢

您的错误在
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())

实际代码显示输入有18个通道,因此您不能将
空间环境
与3个输入通道一起使用。这是我的错误。实际代码是3,将获得3个通道的输入,但现在我想给模型2批3个通道的图像(我可以通过在第一层将3更改为6来给我的模型批6个通道,但我想给网络两批3个通道,而不是一批6个通道)你的模型的输入张量的尺寸是多少?输入张量的尺寸是128*3*227*227。你在gpu上训练吗?您的模型和输入张量已转换为cuda模型和张量?非常感谢您的帮助。我把它改为3,它起作用了。@M.es如果这解决了你的问题,接受答案,向大家表明问题已经解决了