📜  将 pytorch 张量转换为 numpy (1)

📅  最后修改于: 2023-12-03 15:09:32.635000             🧑  作者: Mango

将 PyTorch 张量转换为 Numpy

在深度学习中,PyTorch 和 Numpy 都是很重要的库。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 数组。

注意事项
  • 如果 PyTorch 张量是在 GPU 上,则需要使用 .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()
  • 如果 PyTorch 张量 tensordtype 为整型,那么 Numpy 数组 numpy_arraydtype 也应该为整型。同样的,如果 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