总结

  • 文章来源:CSDN_LawsonAbs
  • LawsonAbs的认知与思考,望各位读者审慎阅读。
  • 持续更新~

本文详细介绍在写神经网络+模型训练代码时会遇到的一些问题,零散总结。

1.注意细节

注意细节,一定要注意细节,代码是一个逻辑性极强的活儿,只有当每行代码逻辑都成立时,才能生效,否则就是报错,而且一定要从报错信息中找出些什么!

在这里插入图片描述
我在使用某个训练好的模型进行预测时,发现f1值特别的差,但代码都是完好的啊,怎么就有问题呢?后来经过查找才知道原来是shell脚本中的加载模型的那行参数没有生效,如下图所示:
在这里插入图片描述
就导致预测效果极差。
其实这个问题也在上面的日志中体现出来了: run1.sh: 15: --init_chechpoint: not found,但是我却鲁莽地直接忽视了这个报错,却去查找代码的问题,简直可笑!

2 类设计

训练集,验证集,测试集三者的任务都是不同的,你是否想好它们的数据集是否共用同一个Dataset?还是为不同的数据集提供一个实现?

2.1 训练集

  • 需要label,用于计算损失

2.2 验证集

  • 需要label,可视化最后的损失情况
  • 如果是一个NER问题,则需要原文本信息,因为需要可视化最后抽取出来的具体是什么数据。

2.3 测试集

  • 没有label
  • 如果是一个NER问题,那么仍然需要原文本信息

经过上面这些分析,就可以知道这些数据集包含的数据项是不完全相同的。

3 方法设计

  • 是将一个方法设计的复杂,还是共用同一个方法?
    这也是需要回答的问题

  • 不要在模型中计算loss,而应该在train()函数中计算loss。但无论如何,请确保在evaluate的时候,模型的logtis是可以被传递回来的。

  • 通常在验证模型时,也需要打出loss 和 f1 值,因为你需要查看验证集loss的情况,f1值那是更自然的需求了。

  • 最好把参数全写成配置参数,这样launch.json 和shell 脚本就不会因为参数而冲突了

  • 参数调整后,要跑整个模型时,请用shell脚本运行,而不是在vscode中用调试窗口跑。因为这样无法方便你对其它的代码调试,从而耽误进度。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐