📅  最后修改于: 2023-12-03 15:09:32.635000             🧑  作者: Mango
在深度学习中,PyTorch 和 Numpy 都是很重要的库。PyTorch 提供了张量操作的高阶抽象,而 Numpy 提供了丰富的科学计算功能。有时候我们需要在这两个库之间转换张量,以方便调用它们的相应函数。这里介绍如何将 PyTorch 张量转换为 Numpy。
可使用 .numpy()
方法将 PyTorch 张量转换为 Numpy 数组。以下是一个例子:
import torch
import numpy as np
# 创建一个随机 PyTorch 张量
torch_tensor = torch.randn(3, 5)
# 将 PyTorch 张量转换为 Numpy 数组
numpy_array = torch_tensor.numpy()
print(type(numpy_array)) # <class 'numpy.ndarray'>
在上面的例子中,我们首先创建了一个随机的 3x5 张量 torch_tensor
,然后使用 .numpy()
方法将其转换为 Numpy 数组 numpy_array
。最后我们打印了 numpy_array
类型的结果为 numpy.ndarray
,证明已经成功地将 PyTorch 张量转换为 Numpy 数组。
.cpu()
方法将其先转到 CPU 上,然后再使用 numpy()
方法进行转换。tensor_on_gpu = torch.randn(3, 5).to('cuda')
# 错误的转换方式
numpy_array = tensor_on_gpu.numpy() # 报错:RuntimeError: can't call .numpy() on Tensor that requires grad
# 正确的转换方式
numpy_array = tensor_on_gpu.cpu().numpy()
tensor
的 dtype
为整型,那么 Numpy 数组 numpy_array
的 dtype
也应该为整型。同样的,如果 PyTorch 张量的 dtype
为浮点型,则 Numpy 数组的 dtype
也应该为浮点型。# 创建一个整型 PyTorch 张量
int_tensor = torch.randint(0, 10, (3, 5), dtype=torch.int)
# 将 PyTorch 张量转换为 Numpy 数组
int_array = int_tensor.numpy()
# 创建一个浮点型 PyTorch 张量
float_tensor = torch.randn(3, 5)
# 将 PyTorch 张量转换为 Numpy 数组
float_array = float_tensor.numpy()
print(int_array.dtype) # int64
print(float_array.dtype) # float32