本系列文章配套代码获取有以下两种途径:
-
通过百度网盘获取:
链接:https://pan.baidu.com/s/1XuxKa9_G00NznvSK0cr5qw?pwd=mnsj
提取码:mnsj
-
前往GitHub获取:
https://github.com/returu/PyTorch
torch.from_numpy():
# 创建一个 NumPy 数组
>>> numpy_array = np.array([[1, 2, 3], [4, 5, 6]])
# 将 NumPy 数组转换为 PyTorch 张量
>>> tensor = torch.from_numpy(numpy_array)
# 修改 PyTorch 张量的一个元素
>>> tensor[0, 0] = 100
# NumPy 数组也发生了改变
>>> numpy_array
array([[100, 2, 3],
[ 4, 5, 6]])
# 同样地,如果修改 NumPy 数组,PyTorch 张量也会改变
>>> numpy_array[1, 1] = 200
>>> tensor
tensor([[100, 2, 3],
[ 4, 200, 6]], dtype=torch.int32)
-
创建不共享内存的独立张量:
# 创建一个 NumPy 数组
>>> numpy_array = np.array([[1, 2, 3], [4, 5, 6]])
>>> numpy_array
array([[1, 2, 3],
[4, 5, 6]])
# 创建一个与原始 NumPy 数组不共享内存的新张量
>>> tensor_independent = torch.tensor(numpy_array, dtype=torch.float32) # 可以指定数据类型
>>> tensor_independent
tensor([[1., 2., 3.],
[4., 5., 6.]], dtype=torch.float32)
>>> numpy_array[1, 1] = 200
>>> numpy_array
array([[ 1, 2, 3],
[ 4, 200, 6]])
>>> tensor_independent
tensor([[1., 2., 3.],
[4., 5., 6.]], dtype=torch.float32)
# 创建一个 NumPy 数组
>>> numpy_array = np.array([[1, 2, 3], [4, 5, 6]])
>>> numpy_array
array([[1, 2, 3],
[4, 5, 6]])
# 创建 NumPy 数组副本,然后再转换为张量
>>> numpy_array_copy = numpy_array.copy()
>>> tensor_independent = torch.from_numpy(numpy_array_copy)
>>> tensor_independent
tensor([[1, 2, 3],
[4, 5, 6]], dtype=torch.int32)
>>> numpy_array[1, 1] = 200
>>> numpy_array
array([[ 1, 2, 3],
[ 4, 200, 6]])
>>> tensor_independent
tensor([[1, 2, 3],
[4, 5, 6]], dtype=torch.int32)
torch.numpy():
# 假设有一个在 CPU 上的 PyTorch 张量
>>> cpu_tensor = torch.tensor([1, 2, 3])
# 使用 .numpy() 将其转换为 Numpy 数组
>>> numpy_array_from_tensor = cpu_tensor.numpy()
# 修改 Numpy 数组
>>> numpy_array_from_tensor[0] = 10
# 原始的 PyTorch 张量也发生了改变
>>> cpu_tensor
tensor([10, 2, 3])
# 假设有一个在 GPU 上的 PyTorch 张量
>>> gpu_tensor = torch.tensor([1, 2, 3] , device="cuda")
# 这会抛出错误
>>> numpy_array_from_gpu_tensor = gpu_tensor.numpy()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.
# 正确的做法
>>> numpy_array_from_gpu_tensor = gpu_tensor.to(device="cpu").numpy()
>>> numpy_array_from_gpu_tensor
array([1, 2, 3], dtype=int64)
https://pytorch.org/
本篇文章来源于微信公众号: 码农设计师