Theano TypeError
Я читаю изображения 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 ответа
Это перекрестная публикация в списке рассылки theano-users.
Даг дал ответ там:
Переменная theano, которую вы используете, определяется как целое число, но вы передали ее с плавающей точкой, поэтому ошибка 'TensorType(int32, vector) не может хранить значение типа d float32...'. Вы можете либо изменить код загрузки данных, чтобы преобразовать его в int32, либо изменить символическую переменную на что-то, поддерживающее float32.
Итак, где-то у вас есть строка, которая выглядит примерно так:
x = T.ivector()
или же
x = T.vector(dtype='int32')
Похоже, вам нужно изменить это на что-то вроде
x = T.tensor4()
где dtype
был изменен на равный theano.config.floatX
и размерность, как было изменено на 4, чтобы соответствовать 4-мерной природе X
,
Если вы не поняли, у меня была похожая ошибка, и вот как я ее исправил: приведите ваш y как int32. Значения x могут быть floatx, но y ДОЛЖЕН быть int32 в nolearn для классификации.