Определение плотности с помощью библиотеки keras
Я немного не понимаю, как создать простую последовательность для моих данных.
Данные имеют следующие размеры:
X_train.shape
(2369, 12)
y_train.shape
(2369,)
X_test.shape
(592, 12)
y_test.shape
(592,)
Вот как я создаю модель:
batch_size = 128
nb_epoch = 20
in_out_neurons = X_train.shape[1]
dimof_middle = 100
model = Sequential()
model.add(Dense(batch_size, batch_input_shape=(None, in_out_neurons)))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(batch_size))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(in_out_neurons))
model.add(Activation('linear'))
# I am solving the regression problem, not the classification one
model.compile(loss="mean_squared_error", optimizer="rmsprop")
history = model.fit(X_train, y_train,
batch_size=batch_size, nb_epoch=nb_epoch,
verbose=1, validation_data=(X_test, y_test))
Сообщение об ошибке:
Исключение: ошибка при проверке модели input: expected dense_input_14 to
имеют форму (None, 1), но получили массив с формой (2369, 12)ç
Ошибка:
Ошибка при проверке модели target: ожидается, что activation_42 будет иметь форму
(Никто, 12) но получил массив с формой (2369, 1)
Эта ошибка возникает в строке:
model.add(Dense(in_out_neurons))
Как изменить Dense, чтобы заставить его работать?
Другой вопрос, Как добавить простой автоэнкодер для инициализации Весов ANN?
1 ответ:
Одна из ваших проблем заключается в том, что вы, кажется, неправильно понимаете, что такое пакет. Пакет-это число обучающих выборок, вычисленных за один раз, поэтому вместо вычисления одной обучающей выборки из
X_trainза один раз вы используете, например, 100 за один раз. Важно то, что это не имеет никакого отношения к вашей модели.Поэтому, когда вы пишете
model.add(Dense(batch_size, batch_input_shape=(None, in_out_neurons)))Затем вы создаете полностью связанный слой с выходным размером одного пакета. Это не имеет большого смысла.
Еще один проблема в том, что выход вашей модели составляет 12 нейронов, а ваш
Y- только одно значение/нейрон. Ваша модель выглядит следующим образом:| v [128] [128] [ 12] | vТогда то, что делает
fit(), это вводит матрицу формы(128, 12)((batch size, X_train.shape[1])) в модель и пытается сравнить выход shape(128,12)из последнего слоя с соответствующимиYзначениями пакета (shape(128,1)).
Comments