Machine learning 在torch中使用CAddTable和ConcatTable时出错

Machine learning 在torch中使用CAddTable和ConcatTable时出错,machine-learning,lua,deep-learning,conv-neural-network,torch,Machine Learning,Lua,Deep Learning,Conv Neural Network,Torch,我尝试使用torch在我的网络中构建一些剩余块,但为什么torch在使用CAddTable和ConcatTable时只给我错误信息呢。谁能给点建议吗?提前谢谢。我使用的代码如下: a=image.load('test.png') input=torch.Tensor(1,3,60,60) input[1]=a input=input:cuda() local conv_block_1 = nn.Sequential() conv_block_1:add(cudnn.SpatialConvolut

我尝试使用torch在我的网络中构建一些剩余块,但为什么torch在使用CAddTable和ConcatTable时只给我错误信息呢。谁能给点建议吗?提前谢谢。我使用的代码如下:

a=image.load('test.png')
input=torch.Tensor(1,3,60,60)
input[1]=a
input=input:cuda()
local conv_block_1 = nn.Sequential()
conv_block_1:add(cudnn.SpatialConvolution(3, 16, 5, 5, 1, 1, 2, 2))--  ,(60+2*2-5)/1+1=60
conv_block_1:add(cudnn.SpatialBatchNormalization(16))
conv_block_1:add(cudnn.ReLU(true))

local conv_block_2 = nn.Sequential()
conv_block_2:add(cudnn.SpatialConvolution(16, 32, 5, 5, 1, 1, 2, 2)) -- (60+2*2-5)/1+1=60
conv_block_2:add(cudnn.SpatialBatchNormalization(32))
conv_block_2:add(cudnn.ReLU(true))

local conv_block_3 = nn.Sequential()
conv_block_3:add(cudnn.SpatialConvolution(32, 16, 5, 5, 1, 1, 2, 2))  -- (60+2*2-5)/1+1=60
conv_block_3:add(cudnn.SpatialBatchNormalization(16))
conv_block_3:add(cudnn.ReLU(true))

local concat_block_1 = nn.ConcatTable()
concat_block_1:add(conv_block_1)  ----
concat_block_1:add(conv_block_3 )

local add_block_1 = nn.Sequential()
add_block_1:add(concat_block_1)
add_block_1:add(nn.CAddTable(true))
add_block_1:add(cudnn.ReLU(true))

local model=nn.Sequential()
model:add(conv_block_1)

model:add(conv_block_2)
model:add(conv_block_3)
model:add(add_block_1)
model:cuda()
model:forward(input)
错误如下所示: …torch/install/share/lua/5.1/cudnn/SpatialConvolution。lua:102:输入必须包含:3个功能映射,但收到的输入大小为:1 x 16 x 60 x 60
堆栈回溯:

我认为错误在网络架构中。输入(3个功能映射[FM])->conv_block1(16 FM)->conv_block2(32 FM)->conv_block3(16 FM)->conv_block1(3 FM)当conv_block3的输出为16 FM时。但我想要的只是CAdd conv_block1和conv_block3的输出,它们都是16 FM,错误在哪里?执行
打印(model.modules)
您可以查看网络的连接方式。前三个
nn.顺序
块分别是
conv_块1
conv_块2
conv_块3
conv_block_3
的输出直接连接到concat表,该表内部有
conv_block_3
conv_block_1
。因此,
conv_block_3
(16个特征映射[FM])的输出直接进入concat表,该表接受输入值
conv_block_1
(3fm)和
conv_block_3
(32fm)。在从第一个
conv_block_3
到concat表的连接中,您会得到错误。那么如何解决这个问题?如何CAdd两个16功能映射?我认为错误在网络架构中。输入(3个功能映射[FM])->conv_block1(16 FM)->conv_block2(32 FM)->conv_block3(16 FM)->conv_block1(3 FM)当conv_block3的输出为16 FM时。但我想要的只是CAdd conv_block1和conv_block3的输出,它们都是16 FM,错误在哪里?执行
打印(model.modules)
您可以查看网络的连接方式。前三个
nn.顺序
块分别是
conv_块1
conv_块2
conv_块3
conv_block_3
的输出直接连接到concat表,该表内部有
conv_block_3
conv_block_1
。因此,
conv_block_3
(16个特征映射[FM])的输出直接进入concat表,该表接受输入值
conv_block_1
(3fm)和
conv_block_3
(32fm)。在从第一个
conv_block_3
到concat表的连接中,您会得到错误。那么如何解决这个问题?如何CAdd两个16要素图?