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 для классификации.

Другие вопросы по тегам