【问题标题】:pytorch: Convert a tuple of FloatTensors into a numpy arraypytorch:将 FloatTensors 元组转换为 numpy 数组
【发布时间】:2018-04-19 04:42:05
【问题描述】:

我刚得到一个带有 MNIST 数据的 torchvision.datasets 对象

train_dataset= dsets.MNIST(root='./data',train=True,transform=transforms.ToTensor(),download=True)

我想将此元组转换为一组形状为 60000x28x28 和标签为 60000 的 numpy 数组

我知道提供数据的形式,可以直接应用到pytorch神经元中作为训练数据,但我想将这些数据转换成numpy数组。

我做的第一件事是将 (data,labels) 的元组与 zip(*train_dataset) 分开

data,labels = zip(*train_dataset)

labels 很容易转换为 numpy 数组,但是我无法按照我想要的方式将“数据”转换为 numpy 数组。当我尝试将所有数据转换为 numpy.array 之类的

data[:].numpy()

我收到一条错误消息,告诉我“元组”对象没有“numpy”属性。如果我将此 data[:] 转换为 numpy,则仅将第一个维度(60000 个数据)转换为 numpy.array,但其余的仍为张量。

我可以使用循环转换所有数据(实际上我做到了)并且它可以工作,但是它真的很慢。以前有人做过这样的转换吗?

谢谢。

【问题讨论】:

    标签: python arrays numpy pytorch tensor


    【解决方案1】:

    也许这样的东西对你有用:

    train_dataset.train_data.numpy()  #contains (60000, 28, 28) numpy array
    train_dataset.train_labels.numpy() # contains labels
    

    【讨论】:

    • 谢谢,我已经提供了另一个解决方案(但你的解决方案要容易得多): np.array([a[i].view(-1).numpy() for i in range(len (a))])
    【解决方案2】:

    数据中似乎有两个张量。您需要检查变量数据是否仅包含一个张量,然后命令 tensor.numpy() 应该可以正常工作。

    【讨论】:

      猜你喜欢
      • 2012-04-18
      • 2021-12-18
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 2020-04-14
      • 2018-05-03
      相关资源
      最近更新 更多