Страницы

Поиск по вопросам

пятница, 14 февраля 2020 г.

ValueError: Error when checking input: expected input_120 to have 3 dimensions, but got array with shape (96, 7)

#python #python_3x #нейронные_сети #машинное_обучение #keras


У меня есть такой код:

a=[[1,23,345,235,235,644,757],
[2,455,325,235578,23524,6413,757567],
[3,123,125,2375,23554,64123,75778],
[...],
[35,244,245,231235,2158935,6567944,7567557]]

b=[[1],[-1],[0],[...],[1]]

c=np.array(a)
d=np.array(b)
print(c.shape)
print(d.shape)

inputs = Input(shape=(96,7))
x = Dense(64, activation='relu')(inputs)
x = Dense(64, activation='relu')(x)
predictions = Dense(10, activation='softmax')(x)
model = Model(inputs=inputs, outputs=predictions)
model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])
model.fit(c, d)


Выводит:

(96, 7)
(96, 1)
ValueError: Error when checking input: expected input_120 to have 3 dimensions, but
got array with shape (96, 7)


Никак не могу понять в чем же тут проблема. Помогите пожалуйста.
    


Ответы

Ответ 1



у вас тут похоже две проблемы: число строк (образцов) в размерности модели не учитывается. Т.е. вместо inputs = Input(shape=(96,7)) используйте: inputs = Input(shape=(7,)) На последнем слое вы использовали 10 выходных нейронов (иными словами вы хотите посчитать вероятности принадлежности к 10-ти классам), а на вход (в качестве y/target) вы подаете тензор/матрицу с одним столбцом (модель же ожидает 10 столбцов). Для того чтобы исправить 2-ю проблему можно категоризировать (One-Hot-Encoding) d, получив в итоге "One Hot Encoded" матрицу с 10-ю столбцами. Пример: In [46]: from keras.utils import to_categorical In [47]: Y = to_categorical(d, num_classes=10) In [48]: Y Out[48]: array([[0., 1., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 1.], [1., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 1., 0., 0., 0., 0., 0., 0., 0., 0.]], dtype=float32) Весь исправленный код: from keras import Model, Sequential from keras.layers import * from keras.utils import to_categorical a=[[1,23,345,235,235,644,757], [2,455,325,235578,23524,6413,757567], [3,123,125,2375,23554,64123,75778], [35,244,245,231235,2158935,6567944,7567557]] b=[[1],[-1],[0],[1]] X = np.array(a) Y = to_categorical(np.array(b), num_classes=10) model = Sequential() model.add(Dense(64, activation='relu', input_dim=7)) model.add(Dense(64, activation='relu')) model.add(Dense(10, activation='softmax')) model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) print(model.summary()) model.fit(X, Y)

Комментариев нет:

Отправить комментарий