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

Posted

技术标签:

【中文标题】如何在 Torch 的网络开头合并两个张量?【英文标题】:How to merge two tensors at the beginning of a network in Torch? 【发布时间】:2016-12-20 19:40:45 【问题描述】:

给定以下网络的开头

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】:

没有不兼容形状的“合并”张量。您应该简单地传递张量表并使用SelectTable 操作启动您的网络并使用nngraph,而不是简单的顺序。特别是 - 您如何期望空间卷积在这种“缩小”到您的条件的奇怪“张量”上工作?对于此类用例,数学中没有明确定义的操作,因此您必须更加具体(您将使用 nngraph 和 SelectTable 来实现)。

【讨论】:

以上是关于如何在 Torch 的网络开头合并两个张量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在pytorch中连接两个不同尺寸的张量

如何从 C 中读取 Torch 张量 [关闭]

如何对两个 PyTorch 量化张量进行矩阵相乘?

如何连接具有 2 个不同维度的 2d 张量

在 Torch 中,如何从整数标签列表中创建 1-hot 张量?

Torch:如何按行对张量进行洗牌?