#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)
Комментариев нет:
Отправить комментарий