当前位置: 首页 > 知识库问答 >
问题:

cuda张量的索引列表会出错-"无法将cuda: 0设备类型张量转换为Numpy"

狄承望
2023-03-14

我有一个cuda张量列表:

>>> X_train
[tensor([  101,  3533...='cuda:0'), tensor([  101,  3422...='cuda:0'), tensor([  101,  2054...='cuda:0'), tensor([ 101, 1019, ...='cuda:0'), tensor([  101, 14674...='cuda:0'), tensor([  101,  9246...='cuda:0'), tensor([  101,  2054...='cuda:0'), tensor([  101,  2339...='cuda:0), ... ]

我正在尝试应用k-折叠交叉验证。因此,我想使用k倍索引列表为该列表编制索引:

>>> X_train[train_index]

但它给了我错误:

TypeError: only integer scalar arrays can be converted to a scalar index

根据这个答案,问题是我不能使用索引列表来索引列表。在努比是允许的。

所以我试着把它转换成Numpy:

np.array(X_train)

但它给了我一个错误:

TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first. 

我真的必须在索引之前将这些单独的cuda张量移动到cpu吗?如何在cuda上轻松索引cuda张量列表(利用GPU进行训练模型)?或者这是不可能的,我应该首先对它们进行索引(首先将它们形成numpy数组),然后将索引的部分移动到cuda?是否遵循任何标准/首选实践来处理数据?

共有1个答案

唐恺
2023-03-14

仅仅为了索引而转换为numpy确实是一个糟糕的选择:这会导致GPU和CPU之间的复制操作,通常会破坏PyTorch的计算图。

您可以改为使用列表理解:

subset = [X_train[i_] for i_ in train_index]
 类似资料:
  • 问题内容: 将Tensorflow与Python绑定一起使用时,如何将张量转换为numpy数组? 问题答案: 急切执行默认情况下 处于启用状态,因此只需调用Tensor对象即可。 有关更多信息,请参见NumPy兼容性。值得注意的是(来自文档), Numpy数组可以与Tensor对象共享内存。 对一个的任何更改都可能反映在另一个上。 大胆强调我的。副本可以返回也可以不返回,这是基于数据是在CPU还是

  • 我尝试将2个损失函数传递给模型,因为Keras允许这样做。 损失:字符串(目标函数的名称)或目标函数或损失实例。见损失。如果模型有多个输出,您可以通过传递字典或损失列表对每个输出使用不同的损失。该模型将使损失值最小化,然后将是所有单个损失的总和。 两个损失函数: 和 然后我构建模型: 当我训练时,它会产生错误: 请帮忙,谢谢!

  • 我已经对数据集进行了一些预处理,并尝试拟合我的ML模型,但它返回以下错误消息:“未能将NumPy数组转换为张量(不支持的对象类型tensorflow.python.framework.ops.Tensor)。” 原始数据集如下所示: 标签列是我的Y,其余的列是特性(Xs)。在将数据输入ML模型之前,我对大小、计数和数量列进行了标准化。这是我的代码: 我不知道是哪一部分导致了这个错误。我不知道是不是

  • 我正在尝试实现tensorflow回归模型,我的数据形状是train_X=(200,4)和train_Y=(200,)。我得到的形状错误,这是我的一段代码,请任何人都能提到我在哪里做错了。 df=pd。读取\u csv('all.csv') df=df。下降(“时间”,轴=1) 打印(df.descripe())#以了解数据集 列车Y=df[“功率”] 列车X=df。下降('功率',轴=1) 列车

  • 这里是一个初学者,你会看到:)我试图将我的keras (.h5)训练模型转换为TensorFlow Lite格式,但我有以下错误; 属性错误: 类型对象 “TFLite转换器” 没有属性 “from_keras_model”

  • 我下面的代码产生了常规的tensorflow模型,但当我试图将其转换为tensorflow lite时,它不起作用,我遵循了以下文档。 https://www.tensorflow.org/tutorials/estimator/linear1 https://www.tensorflow.org/lite/guide/get_started 错误信息 文档摘录 TensorFlow Lite转换