【问题标题】:How can I create a torch tensor from a numpy.array如何从 numpy.array 创建一个火炬张量
【发布时间】:2021-09-22 11:57:37
【问题描述】:

我创建了一个代码,该代码生成一个形状为(12,12) 的矩阵,用于使用卷积神经网络进行彩色图像分析。 我的脚本的输入是一个形状为(5,3,12,12) 张量。我使用 detach().numpy() 去掉了值 5 和 3。

脚本:

    for k in range(5):
            for l in range(3):
                y=x[k][l].detach().numpy()
                m,n= y.shape
                im=np.pad(y,((1,1),(1,1)),'constant')
                Enhanced = np.zeros((m,n))
                for i in range(1,m+1):
                    for j in range(1,n+1):
                        ...      
                z.append(Enhanced)

... 代表一个我不想打扰你的简单函数。

z 是增强型列表,它们是 数组。 所以我的目标是从形状为(5,3,12,12) 的增强型numpy 数组创建一个火炬张量。

我在 for 循环内的代码中添加了这一行,我得到:

 r=torch.Tensor(z)
 print(r.shape) 

然后打印 r.shape 我明白了:

 torch.Size([3, 12, 12])
 torch.Size([6, 12, 12])
 torch.Size([9, 12, 12])
 torch.Size([12, 12, 12])
 torch.Size([15, 12, 12]) 

所以我的理解是我需要堆叠那些 r 张量。 我使用了函数t=np.stack(r) 但我得到的是最后一次执行的形状,即torch.Size([15, 12, 12]) 那么我该如何修改它以获得(5, 3, 12, 12)的形状@

【问题讨论】:

    标签: torch numpy python numpy pytorch


    【解决方案1】:

    你必须:

    • np.array 的堆栈列表(Enhanced 个)
    • 通过torch.from_numpy 函数将其转换为 PyTorch 张量

    例如:

    import numpy as np
    
    some_data = [np.random.randn(3, 12, 12) for _ in range(5)]
    
    stacked = np.stack(some_data)
    tensor = torch.from_numpy(stacked)
    

    请注意list 中的每个np.array 必须具有相同的形状

    对于不同的形状,可以这样做:

    import numpy as np
    import torch
    
    some_data = [np.random.randn(3, 12, 12) for _ in range(5)] + [
        np.random.randn(6, 12, 12)
    ]
    
    stacked = np.concatenate(some_data).reshape(-1, 3, 12, 12)
    tensor = torch.from_numpy(stacked)
    
    print(tensor.shape)
    

    在你的情况下:

    r = torch.from_numpy(np.concatenate(z).reshape(-1, 3, 12, 12))
    

    【讨论】:

      猜你喜欢
      • 2021-08-06
      • 2022-07-20
      • 1970-01-01
      • 2020-06-11
      • 2020-04-16
      • 2021-08-25
      • 1970-01-01
      • 2020-08-02
      • 2017-02-23
      相关资源
      最近更新 更多