对keras训练过程中loss,val_loss,以及accuracy,val_accuracy的可视化

    hist = model.fit_generator(generator=data_generator_reg(X=x_train, Y=[y_train_a,y_train_g], batch_size=batch_size),
                                   steps_per_epoch=train_num // batch_size,
                                   validation_data=(x_test, [y_test_a,y_test_g]),
                                   epochs=nb_epochs, verbose=1,
                                   workers=8, use_multiprocessing=True,
                                   callbacks=callbacks)

    logging.debug("Saving weights...")
    model.save_weights(os.path.join(db_name+"_models/"+save_name, save_name+'.h5'), overwrite=True)
    pd.DataFrame(hist.history).to_hdf(os.path.join(db_name+"_models/"+save_name, 'history_'+save_name+'.h5'), "history")

在训练时,会输出如下打印:

640/640 [==============================] - 35s 55ms/step - loss: 4.0216 - mean_absolute_error: 4.6525 - val_loss: 3.2888 - val_mean_absolute_error: 3.9109

有训练loss,训练预测准确度,以及测试loss,以及测试准确度,将文件保存后,使用下面的代码可以对训练以及评估进行可视化,下面有对应的参数名称:
loss,mean_absolute_error,val_loss,val_mean_absolute_error

import pandas as pd
import matplotlib.pyplot as plt
import argparse
import os
import numpy as np

def get_args():
    parser = argparse.ArgumentParser(description="This script shows training graph from history file.")
    parser.add_argument("--input", "-i", type=str, required=True,
                        help="path to input history h5 file")
    args = parser.parse_args()
    return args


def main():
    args = get_args()
    input_path = args.input

    df = pd.read_hdf(input_path, "history")
    print(np.min(df['val_mean_absolute_error']))
    input_dir = os.path.dirname(input_path)
    plt.plot(df["loss"], '-o', label="loss (age)", linewidth=2.0)
    plt.plot(df["val_loss"], '-o', label="val_loss (age)", linewidth=2.0)
    plt.xlabel("Number of epochs", fontsize=20)
    plt.ylabel("Loss", fontsize=20)
    plt.legend()
    plt.grid()
    plt.savefig(os.path.join(input_dir, "loss.pdf"), bbox_inches='tight', pad_inches=0)
    plt.cla()

    plt.plot(df["mean_absolute_error"], '-o', label="training", linewidth=2.0)
    plt.plot(df["val_mean_absolute_error"], '-o', label="validation", linewidth=2.0)
    ax = plt.gca()
    ax.set_ylim([2,13])
    ax.set_aspect(0.6/ax.get_data_ratio())
    plt.xticks(fontsize=20)
    plt.yticks(fontsize=20)
    plt.xlabel("Number of epochs", fontsize=20)
    plt.ylabel("Mean absolute error", fontsize=20)
    plt.legend(fontsize=20)
    plt.grid()
    plt.savefig(os.path.join(input_dir, "performance.pdf"), bbox_inches='tight', pad_inches=0)


if __name__ == '__main__':
    main()

  • 0
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Keras是一个非常流行的深度学习框架,许多人使用它来构建和训练深度学习模型。在训练模型时,我们通常关注其的两个指标:lossaccuracy。前者表示训练集上的误差,后者表示模型在验证集上的准确率。然而,在训练模型时,我们可能会遇到一些问题,其一个比较常见的问题就是val_loss不下降。 val_loss指的是模型在验证集上的误差,如果它不断增加,那么说明我们的模型过拟合了。过拟合指的是模型在训练集上表现良好,但是在验证集上表现较差的情况。这种情况通常是由于模型过于复杂,过度拟合了训练集,无法泛化到新的数据上。 解决val_loss不下降的方法是多种多样的。以下是一些可能有用的方法: 1. 增加数据量:可能过拟合的一个原因是我们的数据太少。我们可以通过采集更多的数据来解决这个问题。 2. 增加正则化:正则化是一种降低模型复杂度的方法。我们可以在模型添加一些约束,如L1或L2正则化,来避免过拟合。 3. 采用更简单的模型:如果我们的模型太复杂了,我们可以采用更简单的模型来解决过拟合问题。 4. 重新调整超参数:有时候,我们可能会调整模型的一些参数,如学习率或batch size,来优化模型的性能。 总之,当我们遇到val_loss不下降的时候,我们需要认真分析模型,找出可能的原因,并采取相应的措施来解决问题。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值