火炬挤压和批处理尺寸

问题描述 投票:1回答:1

[这里有人知道torch.squeeze函数是否遵守批次(例如第一个)维度吗?从某些内联代码来看似乎没有。.但是也许其他人比我更了解内部工作原理。

顺便说一句,潜在的问题是我的张量形状为(n_batch, channel, x, y, 1)。我想用一个简单的函数删除最后一个尺寸,以便最终得到(n_batch, channel, x, y)的形状。

当然可以进行整形,甚至可以选择最后一个轴。但是我想将此功能嵌入层中,以便可以轻松地将其添加到ModuleListSequence对象。

pytorch torch
1个回答
1
投票

不!挤压不遵守批次尺寸。如果批处理尺寸可能为1时使用挤压,则可能会导致错误。根据经验,默认情况下,仅torch.nn中的类和函数会尊重批处理尺寸。

这过去使我头疼。 我建议使用reshape或仅将squeeze与可选的输入尺寸参数一起使用。在您的情况下,可以使用.squeeze(4)仅删除最后一个尺寸。这样就不会发生意外情况。没有输入尺寸的挤压导致我产生了意外的结果,特别是在

  1. 模型的输入形状可能有所不同
  2. 批量大小可能有所不同
  3. 正在使用[nn.DataParallel(在这种情况下,特定实例的批处理大小可以减小为1)]
© www.soinside.com 2019 - 2024. All rights reserved.