首页 文章

如何在Keras中保存val_loss和val_acc

提问于
浏览
1

我在Keras录制'val_loss'和'val_acc'时遇到了麻烦 . 'loss'和'acc'很容易,因为它们总是记录在model.fit的历史中 .

如果在 fit 中启用了验证,则会记录'val_loss',如果启用了验证和准确性监视,则会记录 val_acc . 但是,这是什么意思?

我的节点是model.fit(train_data,train_labels,epochs = 64,batch_size = 10,shuffle = True,validation_split = 0.2,callbacks = [history]) .

如您所见,我使用5倍交叉验证并对数据进行随机播放 . 在这种情况下,如何在'fit'中启用'validation'来记录'val_loss'和'val_acc'?

谢谢

1 回答

  • 0

    从Keras文档中,我们有了models.fit方法:

    fit(x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None)
    

    'val_loss' is recorded if validation is enabled in fit, and val_accis recorded if validation and accuracy monitoring are enabled. - 如果用于上述fit方法中的callbacks参数,则来自 keras.callbacks.Callback() 对象 . 它可以用如下:

    from keras.callbacks import Callback
        logs = Callback()
        model.fit(train_data, train_labels,epochs = 64, batch_size = 10,shuffle = True,validation_split = 0.2, callbacks=[logs]) 
        # Instead of using the history callback, which you've used.
    

    如果在 fit 中启用了验证,则会记录'val_loss':使用model.fit方法时,您使用的是 validatoin_split 参数,或者使用 validation_data 参数 to specify the tuple (x_val, y_val) or tuple (x_val, y_val, val_sample_weights) on which to evaluate the loss and any model metrics at the end of each epoch. .

    历史对象 . 其History.history属性是连续时期的训练损失值和度量值的记录,以及验证损失值和验证度量值(如果适用) . - Keras文档(model.fit方法的返回值)

    在您的模型中:

    model.fit(train_data, train_labels,epochs = 64,batch_size = 10,shuffle = True,validation_split = 0.2, callbacks=[history])
    

    如果您使用变量来保存model.fit,则使用历史回调:

    history = model.fit(train_data, train_labels,epochs = 64,batch_size = 10,shuffle = True,validation_split = 0.2, callbacks=[history])
    history.history
    

    history.history 将为您输出一个字典: lossaccval_lossval_acc :如下所示:

    {'val_loss': [14.431451635814849,
      14.431451635814849,
      14.431451635814849,
      14.431451635814849,
      14.431451635814849,
      14.431451635814849,
      14.431451635814849,
      14.431451635814849,
      14.431451635814849,
      14.431451635814849],
     'val_acc': [0.1046428571712403,
      0.1046428571712403,
      0.1046428571712403,
      0.1046428571712403,
      0.1046428571712403,
      0.1046428571712403,
      0.1046428571712403,
      0.1046428571712403,
      0.1046428571712403,
      0.1046428571712403],
     'loss': [14.555215610322499,
      14.555215534028553,
      14.555215548560733,
      14.555215588524229,
      14.555215592157273,
      14.555215581258137,
      14.555215575808571,
      14.55521561940511,
      14.555215563092913,
      14.555215624854679],
     'acc': [0.09696428571428571,
      0.09696428571428571,
      0.09696428571428571,
      0.09696428571428571,
      0.09696428571428571,
      0.09696428571428571,
      0.09696428571428571,
      0.09696428571428571,
      0.09696428571428571,
      0.09696428571428571]}
    

    您可以使用注释中给出的csvlogger或者使用更长的方法将字典写入csv文件来保存数据,如下所示writing a dictionary to a csv

    csv_logger = CSVLogger('training.log')
    model.fit(X_train, Y_train, callbacks=[csv_logger])
    

相关问题