如何在Torch的网络开头合并两个张量?

时间:2016-08-14 09:28:36

标签: neural-network deep-learning conv-neural-network torch

鉴于以下网络的开始

local net = nn.Sequential()
net:add(SpatialConvolution(3, 64, 4, 4, 2, 2, 1, 1))

输入张量input

local input = torch.Tensor(batchSize, 3, 64, 64)

// during training
local output = net:forward(input)

我想修改网络以接受第二个张量cond作为输入

local cond = torch.Tensor(batchSize, 1000, 1, 1)

// during training
local output = net:forward({input, cond})

我在添加SpatialConvolution之前添加了JoinTable来修改网络,如下所示:

local net = nn.Sequential()
net:add(nn.JoinTable(2, 4))
net:add(SpatialConvolution(3, 64, 4, 4, 2, 2, 1, 1))

这不起作用,因为两个张量在尺寸2,3和4上都有不同的尺寸。cond张量的大小(batchSize,1000,64,64)不是一个选项,因为它是浪费记忆。

是否有最佳实践可以在网络开头合并两个不同的张量,以便将其输入第一层。

1 个答案:

答案 0 :(得分:1)

没有兼容形状的“合并”张量这样的东西。您只需传递张量表并使用SelectTable操作启动您的网络并使用nngraph,而不是简单的顺序。特别是 - 你怎么能期望空间卷积能够解决这种奇怪的“张量”,它会“缩小”到你的cond?对于这样的用例,数学中没有明确定义的操作,因此你必须更具体(你将使用nngraph和SelectTable实现)。