因Theano和NumPy变量类型导致的错误

6 投票
3 回答
8955 浏览
提问于 2025-04-18 01:43

我正在使用numpy 1.9和最新版本的Theano编写代码,但遇到了一个我无法解决的错误。我怀疑可能是我声明变量类型的方式有问题,但我不知道该怎么处理。感谢你的建议。我想用一个向量生成一个矩阵,然后再加上一个偏置。

import theano.tensor as T
from theano import function
import numpy as np
import pprint
def test_theano_matrix():
   pp = pprint.PrettyPrinter(indent=3)
   W= T.fmatrix()
   x=T.fvector()
   b= T.fvector()
   y = T.dot(W,x) + b
   lin_func = function([W,x,b],y)
   dt = np.dtype(np.float)
   w_inp = np.matrix('1 0;0 1',dtype=dt)
   x_inp = np.matrix('2;1',dtype=dt)
   b_inp = np.matrix('0;0',dtype=dt)
   lin_func(w_inp,x_inp,b_inp)

 if __name__ == '__main__':
   test_theano_matrix()

我遇到了以下错误:

raise TypeError(err_msg, data)
TypeError: ('Bad input argument to theano function at index 0(0-based)',
'TensorType(float32, matrix) cannot store a value of dtype float64 without risking loss of precision. If you do not mind this loss, you can: 1) explicitly cast your data to float32, or 2) set "allow_input_downcast=True" when calling "function".', matrix([[ 1.,  0.],[ 0.,  1.]]))

谢谢你的时间!

3 个回答

1

这个错误看起来很容易理解;你试过以下方法吗:

dt = np.dtype(np.float32) 

??

5

我遇到过类似的错误,后来通过添加一个叫 .theanorc 的文件解决了问题,这个文件里包含了以下两行内容:

[global]

floatX = float32

这样做似乎就解决了所有问题。不过,你的问题显示的错误有点不同。但我觉得试试看还是值得的。

2

这个回答来自于Theano-users google 论坛

你定义你的x变量时是这样的:

x=T.vector(dtype=theano.config.floatX)

这意味着它是一个向量(也就是说,它只有1个维度)。

x_inp = np.matrix('2;1',dtype=dt)

创建的是一个矩阵,而不是一个向量。

Theano中的图是严格类型的,你必须定义正确的维度数量。只需要使用:

x_inp = np.asarray([2,1]) 

实际上,我最后把xb都定义成了矩阵。

撰写回答