我正在阅读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))
答案 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才能进行分类。