Модель Кераса для молекулярной активности - PullRequest
0 голосов
/ 20 мая 2019

Я экспериментирую с проблемой молекулярной активности Мерку и создал набор данных для поезда и теста.

Форма данных следующая:

x_train.shape=(1452, 4306)
y_train.shape=(1452, 1) 
x_test.shape=(363, 4306)
y_test.shape=(363, 1)

Я использовалDense слой для определения модели следующим образом:

model = Sequential()
model.add(Dense(100, activation="relu",  input_shape=(4306,)))
model.add(Dense(50, activation="relu"))
model.add(Dense(25, activation="relu"))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(1))

# Compile the model
model.compile(
    loss='categorical_crossentropy',
    optimizer="adam",
)
model.summary()
# Train the model
model.fit(
    x_train,
    y_train,
    batch_size=300,
    epochs=900,
    validation_data=(x_test, y_test),
    shuffle=True
)

При попытке кода выше, произошла следующая ошибка:

ValueError: Input 0 is incompatible with layer flatten_23: expected min_ndim=3, found ndim=2

Как я могу решитьэта ошибка?

1 Ответ

2 голосов
/ 21 мая 2019

Просто удалите выровненный слой:

model = Sequential()
model.add(Dense(100, activation="relu",  input_shape=(4306,)))
model.add(Dense(50, activation="relu"))
model.add(Dense(25, activation="relu"))
model.add(Dropout(0.25))
model.add(Dense(1))

Данные, отправляемые в последовательные слои, по существу являются 1-D (игнорируя пакетный столбец), так что нечего сглаживать.Данные, поступающие в плоский слой, уже имеют размер 1D.

EDIT - для регрессии:

Категориальная кроссентропия не является подходящей функцией стоимости для регрессии, вам необходимо использовать среднеквадратичную ошибку, которая равнаобычно используется для всех задач регрессии:

model.compile(
    loss='mse',
    optimizer="adam",
)
...