我有两个火炬张量。一个形状为
我已经尝试过重新调整形状,但以下部分让我更加怀疑这种重塑。
[64, 4, 300]
,另一个形状为[64, 300]
。如何将这两个张量连接起来以获得形状为[64, 5, 300]
的结果张量?我知道可以使用tensor.cat
函数来实现此操作,但是为了使用该函数,我需要重新调整第二个张量的形状以匹配张量的维数。我听说不应该对张量进行重塑,因为这可能会破坏张量中的数据。那么我该如何进行这种连接操作?我已经尝试过重新调整形状,但以下部分让我更加怀疑这种重塑。
a = torch.rand(64,300)
a1 = a.reshape(64,1,300)
list(a1[0]) == list(a)
Out[32]: False
unsqueeze
是什么意思?为什么可以安全使用? - Russ Brownreshape(64, 1, 300)
,但这样会显得冗长。unsqueeze
在64
和300
之间添加了一个1
维,使形状可广播。这很安全,因为它只改变了内部数据表示(它被保留在连续的C++数组中),而且还考虑到了步幅等因素。数据只有在无法以这种非侵入性的方式“重塑”时才会被复制(如果您不希望发生复制,应该使用view
)。但你必须知道它是如何工作的,这样你就不会意外地混淆尺寸。 - Szymon Maszke