Определение плотности с помощью библиотеки 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?
548   1  

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

    Ничего не найдено.