Theano TypeError

时间:2016-01-12 16:22:03

标签: numpy theano lasagne nolearn

我正在阅读jpg图像,然后将它们重新塑造成张量。我将图像转换为float32:

def load(folder,table):
X=[]

train = pd.read_csv(table)

for i,img_id in enumerate(train['Image']):

    img = io.imread(folder+img_id[2:])

    X.append(img)

X = np.array(X)/255.
X = X.astype(np.float32)
X = X.reshape(-1, 1, 225, 225)
return X

但是,我收到此错误

TypeError: ('Bad input argument to theano function with name "/Users/mas/PycharmProjects/Whale/nolearn_convnet/Zahraa5/lib/python2.7/site-packages/nolearn/lasagne/base.py:435"  at index 1(0-based)', 'TensorType(int32, vector) cannot store a value of dtype float32 without risking loss of precision. If you do not mind this loss, you can: 1) explicitly cast your data to int32, or 2) set "allow_input_downcast=True" when calling "function".', array([[ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       ..., 
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],

       [ 0.,  0.,  0., ...,  0.,  0.,  0.]], dtype=float32))

2 个答案:

答案 0 :(得分:1)

这是cross-post to the theano-users mailing list

道格在那里提供了答案:

  

您正在使用的theano变量被定义为整数,但是您   传递一个浮点数,因此错误'TensorType(int32,vector)不能   存储dtype float32的值...'。您可以修改数据   加载代码将其强制转换为int32,或将符号变量更改为   支持float32的东西。

所以在某个地方你有一条看起来像这样的行:

x = T.ivector()

x = T.vector(dtype='int32')

看起来您需要将其更改为

x = T.tensor4()

其中dtype已更改为等于theano.config.floatX且维度已更改为4以匹配X的4维特性。

答案 1 :(得分:1)

如果你没弄清楚,我有类似的错误,这就是我修复它的方法: 将你的y转换为int32。 x值可以是floatx,但是y必须是no32的int32才能进行分类。