Keras机器学习:同一模型的不同验证损失

时间:2020-08-20 00:07:55

标签: python tensorflow keras

我正在尝试使用keras来训练一个简单的前馈网络。我尝试了两种我认为相同的网络的不同方法,但是一种方法的性能要好得多。第一个和性能更好的是:

inputs = keras.Input(shape=(384,))
dense = layers.Dense(64, activation="relu")
x = dense(inputs)
x = layers.Dense(64, activation="relu")(x)
outputs = layers.Dense(384)(x)

model = keras.Model(inputs=inputs, outputs=outputs, name="simple_model")

model.compile(loss='mse',optimizer='Adam')

history = model.fit(X_train, 
                    y_train_tf, 
                    epochs=20, 
                    validation_data=(X_test, y_test), 
                    steps_per_epoch=100, 
                    validation_steps=50)

,它的验证损失约为0.2。第二种模型的效果要差得多:

model = keras.models.Sequential()

model.add(Dense(64, input_shape=(384,), activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dense(384, activation='relu'))

optimizer = tf.keras.optimizers.Adam()

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

history = model.fit(X_train, 
                    y_train_tf, 
                    epochs=20, 
                    validation_data=(X_test, y_test), 
                    steps_per_epoch=100, 
                    validation_steps=50)

,它的验证损失大约为5。但是当我对model.summary进行建模时,它们看起来几乎相同。第二个模型有问题吗?

1 个答案:

答案 0 :(得分:1)

我不确定它们是否相同,因为第二个模型在最后一层(384个单位)之后具有relu激活,而第一个没有。这可能是问题所在,因为Keras密集层的默认激活为“无”。