Я строю модель на основе FFNN (Feed Forward Neural Network) с использованием Keras.
Я построил первую версию:
def mlp0(input_dim, loss):
model = Sequential()
model.add(Dropout(0.5, input_shape=(input_dim,)))
model.add(Dense(512, activation='sigmoid'))
model.add(Dense(1, activation='relu'))
model.compile(loss=loss, optimizer=Adagrad())
return model
Это дает мне очень хорошие результаты в к-кратной перекрестной проверке, но когда я прогнозирую набор проверки, производительность плохая.
Итак, я попробовал другую версию.
def mlp1(input_dim, loss):
inputs = keras.Input(shape=(input_dim,))
x = keras.layers.Dropout(0.5)(inputs)
x = keras.layers.Dense(512, activation='sigmoid')(x)
outputs = keras.layers.Dense(1, activation='relu')(x)
model = keras.Model(inputs, outputs)
model.compile(loss=loss, optimizer=Adagrad())
return model
Эта вторая модель дает худшие результаты при перекрестной проверке, но результаты совместимы с результатами в наборе проверки.
На мой взгляд, это идентичные модели, построенные по-разному, но по какой-то причине они дают мне разные ответы. Что я делаю не так?
Edit:
Эти модели ведут себя одинаково:
def mlp0(input_dim, loss):
model = Sequential()
model.add(Dense(512, activation='sigmoid', input_shape=(input_dim,), kernel_regularizer=regularizers.l2(0.01)))
model.add(Dense(1, activation='relu', kernel_regularizer=regularizers.l2(0.01)))
model.compile(loss=loss, optimizer=Adam())
return model
import keras
from keras import regularizers
def mlp1(input_dim, loss):
inputs = keras.Input(shape=(input_dim,))
x = keras.layers.Dense(512, activation='sigmoid', kernel_regularizer=regularizers.l2(0.01))(inputs)
outputs = keras.layers.Dense(1, activation='relu', kernel_regularizer=regularizers.l2(0.01))(x)
model = keras.Model(inputs, outputs)
model.compile(loss=loss, optimizer=Adam())
return model
Это заставляет меня думать, что в фазе прогнозирования есть улов с выпадением