首页 > 解决方案 > 火炬堆栈产生错误的尺寸

问题描述

我对 pytorch 很陌生,我正在尝试在数据加载器中创建数据,我的代码如下所示:

a=[]
.. within a for loop
self.a.append(torch.stack([b[ith_idx][j], \
b[ith_idx][rnd_dist], \
b[rnd_cls_idx][rnd_dist_rnd_cls]]\
))
self.c.append([1,0])

其中,b 是张量的 python 列表。例如,第一个元素b具有形状torch.Size([46, 3, 512, 512])(3 个通道 512 x 512)。

        self.a = torch.stack(self.a)
        self.c = torch.tensor(self.c)

我注意到我有[500,3,3,512,512]和 [500,2] 的形状ab,而我期待500,3,3,512,512500作为张量形状。

关于为什么会发生这种情况的任何指示都会有所帮助。

标签: pytorch

解决方案


的形状c是因为您每次[500, 2]都将两个值的列表附加到循环内部。如果您追加或迭代地追加,那么您将拥有一个元素列表。[1,0]c10500

例如,您可以附加10随机如下:

self.c.append(np.random.randint(2))  # import numpy as np

或者

self.c.append(torch.randint(0,2,(1,)))

推荐阅读