0

我正在使用以下代码训练模型

model=Sequential()
model.add(Dense(100, activation='relu',input_shape=(n_cols,)))
model.add(Dense(100, activation='relu'))
model.add(Dense(2,activation='softmax'))
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
early_stopping_monitor = EarlyStopping(patience=3)
model.fit(X_train_np,target,validation_split=0.3, epochs=100, callbacks=[early_stopping_monitor])

这是为了在 val_loss: 参数在 3 个 epoch 后没有改善时停止训练。结果如下所示。我的问题是模型会以第 8 或第 7 轮的权重停止。因为第 8 轮的性能变差了,所以它停止了。但是该模型以一个糟糕的性能参数前进了 1 个 epoch,因为之前的一个(epoch 7)更好。我现在需要用 7 个 epoch 重新训练模型吗?

Train on 623 samples, validate on 268 samples
Epoch 1/100
623/623 [==============================] - 1s 1ms/step - loss: 4.0365 - accuracy: 0.5923 - val_loss: 1.2208 - val_accuracy: 0.6231
Epoch 2/100
623/623 [==============================] - 0s 114us/step - loss: 1.4412 - accuracy: 0.6356 - val_loss: 0.7193 - val_accuracy: 0.7015
Epoch 3/100
623/623 [==============================] - 0s 103us/step - loss: 1.4335 - accuracy: 0.6260 - val_loss: 1.3778 - val_accuracy: 0.7201
Epoch 4/100
623/623 [==============================] - 0s 106us/step - loss: 3.5732 - accuracy: 0.6324 - val_loss: 2.7310 - val_accuracy: 0.6194
Epoch 5/100
623/623 [==============================] - 0s 111us/step - loss: 1.3116 - accuracy: 0.6372 - val_loss: 0.5952 - val_accuracy: 0.7351
Epoch 6/100
623/623 [==============================] - 0s 98us/step - loss: 0.9357 - accuracy: 0.6645 - val_loss: 0.8047 - val_accuracy: 0.6828
Epoch 7/100
623/623 [==============================] - 0s 105us/step - loss: 0.7671 - accuracy: 0.6934 - val_loss: 0.9918 - val_accuracy: 0.6679
Epoch 8/100
623/623 [==============================] - 0s 126us/step - loss: 2.2968 - accuracy: 0.6629 - val_loss: 1.7789 - val_accuracy: 0.7425
4

2 回答 2

0

restore_best_weightsmonitor设置为目标数量的值一起使用。因此,最佳权重将在训练后自动恢复。

early_stopping_monitor = EarlyStopping(patience=3, 
                                       monitor='val_loss',  # assuming it's val_loss
                                       restore_best_weights=True )

来自文档:

restore_best_weights:是否从监测量的最佳值的epoch恢复模型权重('val_loss'这里)。如果False,则使用训练最后一步获得的模型权重(默认False)。

文档链接

于 2020-05-03T12:44:39.930 回答
0

我放置的所有代码都在 TensorFlow 2.0 中

  • 文件路径:是一个字符串,可以具有格式选项,例如纪元数。例如以下是一个常见的文件路径(weights.{epoch:02d}-{val_loss:.2f}.hdf5)
  • 监视器:(通常是'val_loss'或'val_accuracy')
  • 模式:是最小化还是最大化监控值(通常是“最小”或“最大”)
  • save_best_only:如果设置为 true,那么它只会保存当前 epoch 的模型,如果它是度量值,则比以前更好。但是,如果您将 save_best_only 设置为 false,它将在每个 epoch 之后保存每个模型(无论该模型是否比以前的模型更好)。

代码

model=Sequential()
model.add(Dense(100, activation='relu',input_shape=(n_cols,)))
model.add(Dense(100, activation='relu'))
model.add(Dense(2,activation='softmax'))
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
fname = "weights.{epoch:02d}-{val_loss:.2f}.hdf5"
checkpoint = tf.keras.callbacks.ModelCheckpoint(fname, monitor="val_loss",mode="min", save_best_only=True, verbose=1) 
model.fit(X_train_np,target,validation_split=0.3, epochs=100, callbacks=[checkpoint])
于 2020-05-03T12:55:34.337 回答