在用pytorch训练神经网络时,常常需要在numpy的数组变量类型与pytorch中的tensor类型进行转换。
一、numpy转tensor
首先,导入需要使用的包:
import numpy as np
import torch
然后创建一个numpy类型的数组:
x = np.ones(5)
print(type(x)) # 查看x的类型
这里创建了一个一维的数组,5个都为1,我们打印一下这个x的类型显示如下:
<class 'numpy.ndarray'>
这个就说明现在x是numpy类型的一个数组,用下面的代码将x转换成tensor类型:
x = torch.tensor(x)
print(type(x))
这个打印的结果是:
<class 'torch.Tensor'> # 数明numpy转tensor成功
也可以使用:
x = torch.from_numpy(x)
二、tensor转numpy
直接上代码:
import torch
x = torch.ones(5) # 创建张量x
# tensor([1., 1., 1., 1., 1.])
x_ = x.detach().numpy() # 转换
# array([1., 1., 1., 1., 1.], dtype=float32)
也可以使用
x_= x.numpy()
主要区别在于是否使用detach(),也就是返回的新变量是否需要计算梯度。【用了detach(),不需要计算梯度了】
参考
https://www.cnblogs.com/wzyuan/p/9733433.html
https://www.cnblogs.com/kiwiwk/p/11716459.html
https://blog.csdn.net/weixin_33913332/article/details/93300411
---------------2021.4.23更新---------------------
tensor转为numpy后,遇到一个新的问题,(3,64,64)如何转为(64,64,3)
解决方法:
torch.Tensor转numpy.ndarray:
np.transpose(tensor_a.numpy(), (1, 2, 0)) # 将C x H x W 转化为 H x W x C
文章首发于:https://blog.csdn.net/AugustMe/article/details/113841470
参考
https://blog.csdn.net/renweiyi1487/article/details/108933387
https://blog.csdn.net/baidu_26646129/article/details/86712889