gpt4 book ai didi

python - skcuda linalg 中的 "unsupported combination of input order"

转载 作者:太空宇宙 更新时间:2023-11-03 14:09:19 25 4
gpt4 key购买 nike

我正在使用 python 手动实现的神经网络。我使用两个 numpy 数组 X 和 X_test 作为测试样本的向量。一个是训练集,另一个是测试集。

当我将这些传递给我拥有的一系列函数时,一切都会顺利进行,我会得到我想要的任何结果。但是,当我将这些向量切片为仅包含我确定与输出相关的列(或输入特征)时,我收到以下错误:

File "/storage/home/abhirathb/BNN/src/Layer.py", line 498, in updateOutputs
self.outputs = linalg.dot(inputs,self.weights)
File "/home/abhirathb/anaconda2/lib/python2.7/site-packages/skcuda/linalg.py", line 634, in dot
return add_dot(x_gpu, y_gpu, out, transa, transb, 1.0, 0.0, handle)
File "/home/abhirathb/anaconda2/lib/python2.7/site-packages/skcuda/linalg.py", line 465, in add_dot
raise ValueError('unsupported combination of input order')
ValueError: unsupported combination of input order

如果提供给 linalg.dot 的数组没有正确的维度,则会引发类似的错误。不过,我对此进行了测试,并没有发现任何问题。事实上,解决这个问题的补丁相当奇怪。对两个数组进行切片后,我只需将它们保存到文件中,然后将它们加载回来。然后这个错误就不会出现。

我无法弄清楚原因可能是什么以及为什么这个补丁会起作用。希望有人能指出我正确的方向

最佳答案

请注意,当您使用 numpy transpose 函数时,numpy.ndarray 对象将从 C 连续(默认情况下)变为 Fortran 连续(反之亦然)。我怀疑该错误源于连续性问题,因为 1)GPUArray 对象的基本方法经常引发与连续性相关的错误,2)skcuda.linalg 函数似乎会传递一个错误,就像您在传递转置时所描述的那样数组到 GPU 并尝试对其进行操作。

如果您将 numpy 数组传递给 GPU,则可以在传递它之前更改其连续性

x = numpy.ascontiguousarray(x)

对于 C 连续性,或

x = numpy.asfortranarray(x)

fortran 连续性。我不知道数组在 GPU 上后是否有任何方法可以更改数组的连续性,但我假设 pycuda.gpyarray 模块中有适当的方法。

关于python - skcuda linalg 中的 "unsupported combination of input order",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48637274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com