10

我将运行一些更大的模型并想尝试中间结果。

因此,我尝试在每个 epoch 之后使用检查点来保存最佳模型。

这是我的代码:

model = Sequential()
model.add(LSTM(700, input_shape=(X_modified.shape[1], X_modified.shape[2]), return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(700, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(700))
model.add(Dropout(0.2))
model.add(Dense(Y_modified.shape[1], activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

# Save the checkpoint in the /output folder
filepath = "output/text-gen-best.hdf5"

# Keep only a single checkpoint, the best over test accuracy.
checkpoint = ModelCheckpoint(filepath,
                            monitor='val_acc',
                            verbose=1,
                            save_best_only=True,
                            mode='max')
model.fit(X_modified, Y_modified, epochs=100, batch_size=50, callbacks=[checkpoint])

但是在第一个时代之后我仍然收到警告:

/usr/local/lib/python3.6/site-packages/keras/callbacks.py:432: RuntimeWarning: Can save best model only with val_acc available, skipping.
  'skipping.' % (self.monitor), RuntimeWarning)

添加metrics=['accuracy']到模型中的是其他 SO 问题(例如Unable to save weights while using pre-trained VGG16 model)解决方案,但这里的错误仍然存​​在。

4

4 回答 4

26

您正在尝试使用以下代码检查模型

# Save the checkpoint in the /output folder
filepath = "output/text-gen-best.hdf5"

# Keep only a single checkpoint, the best over test accuracy.
checkpoint = ModelCheckpoint(filepath,
                            monitor='val_acc',
                            verbose=1,
                            save_best_only=True,
                            mode='max')

ModelCheckpoint将考虑参数monitor来决定是否保存模型。在您的代码中是val_acc. 因此,如果 增加,它将节省权重val_acc

现在在您的合身代码中,

model.fit(X_modified, Y_modified, epochs=100, batch_size=50, callbacks=[checkpoint])

您尚未提供任何验证数据。ModelCheckpoint无法保存权重,因为它没有monitor要检查的参数。

为了根据您进行检查点,val_acc您必须提供一些这样的验证数据。

model.fit(X_modified, Y_modified, validation_data=(X_valid, y_valid), epochs=100, batch_size=50, callbacks=[checkpoint])

如果您不想出于任何原因使用验证数据并实施检查点,则必须更改ModelCheckpoint基于accloss类似的工作

# Save the checkpoint in the /output folder
filepath = "output/text-gen-best.hdf5"

# Keep only a single checkpoint, the best over test accuracy.
checkpoint = ModelCheckpoint(filepath,
                            monitor='acc',
                            verbose=1,
                            save_best_only=True,
                            mode='max')

请记住,如果您mode要去minmonitorloss

于 2018-10-12T09:54:28.583 回答
1

我有同样的问题,只需将 'val_acc' 编辑为 'val_accuracy'

于 2020-07-11T12:38:22.443 回答
1

它丢失了,不是因为缺少指标,而是因为您没有验证数据。validation_data通过参数添加一些fit,或者使用validation_split

于 2018-10-12T09:44:59.483 回答
0

您只需更改monitor='val_acc'为 ->monitor='val_accuracy'

因为你的指标是metrics=['accuracy']

于 2021-10-09T02:25:15.847 回答