python - numpy 数组可以在 GPU 中运行吗?
问题描述
我正在使用 PyTorch。我有以下代码:
import numpy as np
import torch
X = np.array([[1, 3, 2, 3], [2, 3, 5, 6], [1, 2, 3, 4]])
X = torch.DoubleTensor(X).cuda()
X_split = np.array_split(X.numpy(),
indices_or_sections = 2,
axis = 0)
X_split
但我收到此错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-121-870b5d3f67b6> in <module>()
----> 1 X_prime_class_split = np.array_split(X_prime_class.numpy(),
2 indices_or_sections = 2,
3 axis = 0)
4 X_prime_class_split
TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.
错误消息很清楚,我知道如何通过仅包括.cpu()
, 来解决此错误。X_prime_class.cpu().numpy()
. 我只是想知道这是否证实 numpy 数组不能在 GPU/Cuda 中运行?
解决方案
不,您通常不能在 GPU 阵列上运行 numpy 函数。PyTorch 为 PyTorch 张量重新实现了 numpy 中的大部分功能。例如torch.chunk
,工作原理与此类似,np.array_split
因此您可以执行以下操作:
X = np.array([[1, 3, 2, 3], [2, 3, 5, 6], [1, 2, 3, 4]])
X = torch.DoubleTensor(X).cuda()
X_split = torch.chunk(X, chunks=2, dim=0)
它分裂X
成多个张量,而无需X
从 GPU 上移开。
推荐阅读
- python - 尝试使用 python 抓取网站时出错
- php - preg_replace_callback_array 不返回匹配计算值
- react-native - 任何混合应用程序中的多语言 I18n
- linux - 如何使用单个 linux 命令创建带有子文件夹的新文件夹?
- python - Python函数将二进制数字转换为十六进制
- javascript - 如何从复选框中获取选中的值(值)并使用 Angular 保存到数据库中
- javascript - 以毫秒为单位反应本机倒计时计时器
- node.js - EBUSY:尝试执行 npm install 时资源繁忙或锁定在 Docker 中
- android - 将每个字符的 EditText 错误设置为 null
- angular - 发射器不发射值