当前位置: 首页 > 知识库问答 >
问题:

在 KERAS 中训练运行后装载砝码,无法识别上一次运行中达到的最高精度水平

杨飞飙
2023-03-14

我进行了一次训练,并以KERAS神经网络模型的以下输出结束。我为模型质量添加了混淆矩阵输出

...

Epoch 09998: val_acc从0.83780 Epoch 9999/10000 12232/12232[= = = = = = = = = = = = = = = = = = = = = = = = = = = = = =]-1s 49us/step-loss:0.2656-ACC:0.9133-val _ loss:0.6134-val _ ACC:0.8051

Epoch 09999: val_acc从0.83780 Epoch 10000/10000 12232/12232[= = = = = = = = = = = = = = = = = = = = = = = = = = = = = =]-1s 48us/step-loss:0.2655-ACC:0.9124-val _ loss:0.5918-val _ ACC:0.8283

纪元10000:val_acc从0.83780 3058/3058没有改善 [==============================] - 0.46us/步

ACC:82.83%型号质量Tn:806 Tp:1727 Fp:262 Fn:263精度:0.8683召回:0.8678精度0.8283 F评分0.8681

然后我对一个超参数进行更改,重新加载所有内容并使用以下代码重新编译

# prep checkpointing
model_file = output_file.rsplit('.',1)[0] + '_model.h5'
checkpoint = ModelCheckpoint(model_file, monitor='val_acc', verbose=1, 
                             save_best_only=True, save_weights_only=True, mode='max')
callbacks_list = [checkpoint]
model.load_weights(model_file) # - commented out first time thru, reload second time thru

adam = optimizers.Adam(lr=l_rate, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)
model.compile(loss='binary_crossentropy', optimizer=adam, metrics=['accuracy'])


model.fit(X_train, Y_train, validation_data=(model_test_X, model_test_y),
          batch_size = batch_s, epochs=num_epochs, 
          callbacks=callbacks_list, verbose=1)

在重新开始时,我希望最好的精度是如上所述。在本例中,val_acc=0.83780

但是,在前两个 epoch 之后,我得到这个输出:

纪元1/10000 12232/12232 [==============================] - 1秒99us/步-损失: 0.2747-acc: 0.9097-val_loss: 0.6191-val_acc: 0.8143

Epoch 00001:val_acc从 -inf 改进为 0.81426,将模型保存为 Data_model.h5

纪元2/10000 12232/12232[= = = = = = = = = = = = = = = = = = = = = = = = = = =]-1s 42us/步损:0.2591-ACC:0.9168-val _ loss:0.6367-val _ ACC:0.8322

Epoch 00002:val_acc从0.81426提升至0.83224,将模型保存至Data_model.h5

Epoch 3/10000 12232/12232 [================val_acc val_loss================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

纪元00003: val_acc从0.83224开始没有改进......

虽然我知道模型可能从不同的地方开始,但我的假设是最好的准确度(val_acc)将从上一次运行中延续下来。

我的问题是我错过了什么吗?

共有1个答案

壤驷阳冰
2023-03-14

关于ModelCheckpoint,正如Wilmar van Ommeren已经在评论中写道的那样,每次调用这个类时,它都会重新初始化搜索最佳结果的过程,因为它是一个类,并且您将它的实例分配给一个称为检查点的变量。

幸运的是,Keras是一个开源项目,这意味着您可以阅读类<code>ModelCheckpoint

因此,每次重复模型训练时,最后一个结果总是被新训练会话的第一个训练过程覆盖,因为变量 best 设置为 Infinity 值,从而丢失了上一个训练会话的所有努力。

要使训练会话继续以前的训练,只需保存上一个训练会话的最佳结果,可以通过从 model.fit() 方法中获取 History 对象并将其保存到变量或文件中来实现此目的。然后,当您必须继续训练模型时,在调用 model.fit() 方法之前,请指定将先前训练的最佳结果指定到变量检查点中,在您的情况下是val_acc。总之,这是使用模型检查点解决问题所需的“伪代码”:

# Previous training...
# Save the best result to a variable or in a file
# Load the best result into a variable
checkpoint = ModelCheckpoint(model_file, monitor='val_acc', verbose=1, save_best_only=True, save_weights_only=True,mode='max')
checkpoint.best = best_accuracy_from_previous_training_session
# Repeat the training...

我想指出的另一件事是编译方法。您作为参数传递给该方法的内容没有错,但最近我发现以下两个问题声称有必要为保存正确信息的方法指定正确的指标:

  1. Keras在加载模型后提供低精度
  2. 保存/加载后精度丢失

虽然只保存和加载模型的权重,但似乎最好根据损失函数指定使用的度量。即使将<code>的‘accurity‘

因此,您所要做的就是将度量中的字符串'准确性'更改为'binary_accuracy'

 类似资料:
  • 将CICS(v5.1)中的IBM权限从8.5.5.0升级到8.5.5.5后,JCICS API无法被自由识别。复制了相同的server.xml,它具有以下功能。我注意到日志中有不同的消息(下面列出的消息),标签为“LIBERTY NOTUSAGE”。有人看到这个吗?我们需要更改任何配置文件吗?

  • 我已在全球范围内安装了react native cli: 然后运行: 我得到了以下结构: 当我运行react native run android时,我得到一个错误: 命令无法识别。你的意思是在一个本地项目中运行这个吗? 当我开始跑步时,我也会得到同样的结果。 反应原生-v 打印: 反应原生-cli: 0.2.0 反应原生:n/a-不在反应原生项目目录中 我做错了什么?

  • 无论何时运行docker构建,我都会得到: “msbuild”不被识别为内部或外部命令,可操作程序或批处理文件。并且“nuget.exe”不被识别为内部或外部命令,可操作程序或批处理文件。 但是,当我从CMD运行msbuild或nuget恢复时,它自己可以正常工作。我已经添加了系统变量/路径的路径

  • 在Linux(Gentoo)上,如果我从Netbean/Services区域启动GlassFish,服务器将启动,管理站点是可访问的,但在Netbean中,我得到以下错误消息: GlassFish服务器4.1启动失败。请检查服务器管理员用户名和密码属性。另外,请检查服务器日志文件以了解其他可能的原因。 我既不能重新开始,也不能终止。知道吗?

  • 问题内容: 我在使javascript代码在AJAX加载的div内运行时遇到问题,我试图包含jquery选项卡,但它不起作用,ajax仅输出文本,无法识别javascript。你能帮忙的话,我会很高兴。 这是我的js代码: 和HTML: 问题答案: 我还没有检查所有代码,但是您使用什么来触发将Javacript加载到div中?窗口/文档就绪功能仅在页面最初加载时触发一次。 尝试将以下内容用于加载到