如何在 Torch 网络的开头合并两个张量?
How to merge two tensors at the beginning of a network in 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) 不是一个选项,因为它浪费内存。
在网络的开头合并两个不同的张量以馈送到第一层是否有任何最佳实践。
没有不兼容形状的 "merging" 张量。您应该简单地传递 a table 个张量 并使用 SelectTable operation and work with nngraph 启动您的网络,而不是简单的顺序。特别是 - 您如何期望空间卷积在您的条件 "narrows down" 这样奇怪的 "tensor" 上工作?对于这种用例,数学中没有明确定义的操作,因此您必须更具体(您将使用 nngraph 和 SelectTable 实现)。
给出如下开头的一个网络
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) 不是一个选项,因为它浪费内存。
在网络的开头合并两个不同的张量以馈送到第一层是否有任何最佳实践。
没有不兼容形状的 "merging" 张量。您应该简单地传递 a table 个张量 并使用 SelectTable operation and work with nngraph 启动您的网络,而不是简单的顺序。特别是 - 您如何期望空间卷积在您的条件 "narrows down" 这样奇怪的 "tensor" 上工作?对于这种用例,数学中没有明确定义的操作,因此您必须更具体(您将使用 nngraph 和 SelectTable 实现)。