Keras回调继续跳过保存检查点,声称缺少val_acc

时间:2018-10-12 09:36:44

标签: python-3.x keras checkpointing

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

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

这是我的代码:

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)的解决方案,但是这里的错误仍然存​​在。

3 个答案:

答案 0 :(得分:4)

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

# 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 minmonitor,则必须将loss更改为def test_cloning() { sshagent(["${SSH_KEY}"]) { sh """ GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \ git clone -b dev git@github.com:/org/repo_eg.git repo_eg/ """ } } pipeline { agent none environment { SSH_KEY='sshkey' } stages { stage('Build') { parallel { stage('static_agent') { agent { label 'agent-1 } steps { test_cloning() } } stage('static_agent') { agent { label 'agent-2' } steps { test_cloning() } } stage('swarm') { agent { label 'swarm' } steps { sh 'mkdir ~/.ssh || true && ssh-keyscan github.com > ~/.ssh/known_hosts' test_cloning() } } } } } post { always { node('agent-1') { deleteDir() } node('agent-2') { deleteDir() } } } }

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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