TypeError:参数“x”的类型不正确(预期为cupy.core.core.ndarray,得到了numpy.ndarray)

Posted

技术标签:

【中文标题】TypeError:参数“x”的类型不正确(预期为cupy.core.core.ndarray,得到了numpy.ndarray)【英文标题】:TypeError: Argument 'x' has incorrect type (expected cupy.core.core.ndarray, got numpy.ndarray) 【发布时间】:2019-08-02 01:44:04 【问题描述】:

在 cupy 中执行以下最小示例。

import numpy, cupy, cupyx

print( cupyx.get_runtime_info() )

mydata = numpy.empty((3,), dtype='f')

#gpu = False
gpu = True
if not gpu:
    xp = numpy
else:
    xp = cupy

    mydata_like = xp.zeros_like(mydata)

以下方式

(venv) user@ailx216:/work/sandbox$ CUDA_PATH=/usr/local/cuda-9.1 python cupy_test.py

给我这个错误:

  File "chainer_test.py", line 14, in <module>
    mydata_like = xp.zeros_like(mydata)
/cupy/creation/basic.py", line 205, in zeros_like
    order, strides, memptr = _new_like_order_and_strides(a, dtype, order)
/cupy/creation/basic.py", line 35, in _new_like_order_and_strides
    order = chr(_update_order_char(a, ord(order)))
TypeError: Argument 'x' has incorrect type (expected cupy.core.core.ndarray, got numpy.ndarray)

print(cupyx.get_runtime_info())的输出如下:

CuPy Version          : 6.2.0
CUDA Root             : /usr/local/cuda-9.1/
CUDA Build Version    : 9010
CUDA Driver Version   : 10000
CUDA Runtime Version  : 9010
cuDNN Build Version   : 7102
cuDNN Version         : 7102
NCCL Build Version    : 2115
NCCL Runtime Version  : (unknown)

如何调试?

【问题讨论】:

这篇文章提到了这个问题:github.com/cupy/cupy/issues/2100。但后来讨论似乎转移到了一个闲散的频道。我找不到:( 您粘贴的代码是否正确?我在代码中找不到这一行:mydata_like = xp.zeros_like(mydata) @niboshi 我很抱歉。这是一个复制错误。请立即检查 sn-p。 有什么要调试的? cupy.zeros_liketakes a cupy array,不是 numpy 数组。 我的错。 mydata = numpy.empty((3,), dtype='f') => mydata = xp.empty((3,), dtype='f') 修复它。下次发帖前必须阅读文档。 【参考方案1】:

我原来的帖子有一个愚蠢的错误。这是一个对我有用的最小的cupy测试。 感谢您的帮助。

import numpy, cupy, cupyx

print( cupyx.get_runtime_info() )


gpu = True
if not gpu:
    xp = numpy
else:
    xp = cupy

mydata = xp.empty((3,), dtype='f')    
mydata_like = xp.zeros_like(mydata)

【讨论】:

以上是关于TypeError:参数“x”的类型不正确(预期为cupy.core.core.ndarray,得到了numpy.ndarray)的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:“Mul”Op 的输入“y”的类型为 float32,与参数“x”的类型 int32 不匹配

类型不正确时引发 TypeError

TypeError:预期的 float32,得到的列表包含类型为“_Message”的张量

Tensorflow Slim:TypeError:预期 int32,得到的列表包含类型为“_Message”的张量

无法将类型“x”的值转换为预期的参数类型“[String:Any]”

Swift 函数调用列表不正确的参数类型