通常,用户想在磁盘上保存并加载经过训练的模型。这就是使用AllenNLP的配置文件非常有用的地方,因为加载模型所需的所有内容,包括权重、配置和词汇表,都可以存储在单个tar文件中。在本章中,将介绍三种对模型进行保存与加载的方式。

手动保存与加载

为了正确地保存和加载AllenNLP模型,我们一般需要有如下文件:

  • 模型配置(用于训练模型的规范)
  • 模型权重(模型的训练参数)
  • 词汇表

AllenNLP中,模型配置由Params类管理,可以使用to_file()方法保存到磁盘。用户可以使用model.state_dict()检索模型权重,并使用PyTorchtorch.save()将其保存到磁盘中。 Vocabulary.save_to_files()方法将Vocabulary对象序列化到目录。

为了从文件加载模型,可以使用Model.load()类方法。 它需要一个Params对象,该对象包含模型配置以及模型权重和词汇序列化的目录路径。 该方法还加载和还原词汇表。

示例代码如下:

# 存储模型
serialization_dir = 'model'
config_file = os.path.join(serialization_dir, 'config.json')
vocabulary_dir = os.path.join(serialization_dir, 'vocabulary')
weights_file = os.path.join(serialization_dir, 'weights.th')os.makedirs(serialization_dir, exist_ok=True)
params.to_file(config_file)
vocab.save_to_files(vocabulary_dir)
torch.save(model.state_dict(), weights_file)# 加载模型
loaded_params = Params.from_file(config_file)
loaded_model = Model.load(loaded_params, serialization_dir, weights_file)
loaded_vocab = loaded_model.vocab  # 在上一步已经加载进去了

archive保存与加载

因为每次需要保存、加载和移动模型时都要处理这三个文件,所以AllenNLP提供了用于归档和取消归档模型文件的实用功能。用户可以使用archive_model()方法将模型配置、权重和词汇表打包成一个tar.gz文件,以及任何附加的补充文件。此方法假设用户使用 training loop训练模型,并打包 training loop运行时保存的文件。 training loop也调用此函数,以便在训练结束时打包最佳模型权重,因此用户不太可能需要自己调用此方法。

另外,用户可以简单地使用load_archive()从存档文件中还原模型。 这将返回一个Archive对象,其中包含配置和模型。

# 建立archive文件
archive_model(serialization_dir, weights='weights.th')# 加载archive文件
archive = load_archive(os.path.join(serialization_dir, 'model.tar.gz'))

AllenNLP命令保存与加载

实际上,如果用户使用AllenNLP命令(例如allennlp train),就会自动处理模型的保存。 训练结束或中断训练后,该命令会自动将最佳模型保存到model.tar.gz文件中。 用户还可以从序列化目录恢复训练。训练命令样例如下:

# my_text_classifier.jsonnet指模型配置文件,-s 参数是保存模型的文件夹名,--include-package 是放自己写的自定义脚本所在的文件夹名
allennlp train my_text_classifier.jsonnet -s model --include-package my_text_classifier

Model.from_archive除了load_archive()之外,AllenNLP还提供了一种便捷方法Model.from_archive()。 这基本上只是在后台调用load_archive()。 其主要目的是将其注册为from_archive类型的Model构造函数,以便用户可以从存档文件加载保存的模型,并继续使用allennlp train命令对其进行训练。 为此,请将以下代码片段放入训练配置文件中:

{..."model": {"type": "from_archive","archive_file": "/path/to/saved/archive/file.tar.gz"}...
}

参考资料

  • allennlp官方文档1.2.2
  • allennlp指南

AllenNLP框架学习笔记(模型篇之保存与加载)相关推荐

  1. Objective-C学习笔记第十五章文件加载与保存

    第十五章文件加载与保存 Cocoa提供了Core Data,他能在后台处理所有文件内容 Cocoa提供了两个通用的文件处理类:属性列表和对象编码 一.属性列表类 在Cocoa中,有一类名为属性列表的对 ...

  2. Spark排序算法系列之(MLLib、ML)LR使用方式介绍(模型训练、保存、加载、预测)

    转载请注明出处:http://blog.csdn.net/gamer_gyt 博主微博:http://weibo.com/234654758 Github:https://github.com/thi ...

  3. mnist手写数字模型训练、保存、加载及图片预测

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 主要过程 导入 加载数据 创建模型和训练 模型应用 总结 前言 非专业程序员,主业PLC单片机,2019年想扩充知识体 ...

  4. Unity学习笔记(5):动态加载Prefab

    第一种方法,从Resources文件夹读取Prefab Assets/Resources文件夹是Unity中的一个特殊文件夹,在博主当前的认知里,放在这个文件夹里的Prefab可以被代码动态加载 直接 ...

  5. contiki学习笔记(六)contiki程序加载器和多线程库

    六.contiki程序加载器 contiki程序加载器是一个用于加载和启动程序的抽象接口. Data Structures struct dsc//DSC程序描述结构. ModulesThe Cont ...

  6. JVM学习笔记之-类加载子系统,类的加载与类的加载过程,双亲委派机制

    一 类加载器与类加载过程 类加载子系统作用 类加载器子系统负责从文件系统或者网络中加载class文件,class文件在文件开头有特定的文件标识. ClassLoader只负责class文件的加载,至于 ...

  7. scrapy学习笔记(三)-关于动态加载网页的爬取(序)

    一.尝试 对于我要爬取的网站内容,按照网上普遍的步骤:直接通过xpath获取到对于数据,再记录到item中,只适用于静态html网页,但是如今的互联网大部分的web页面都是动态的,经常逛的网站例如京东 ...

  8. 深度实践SPARK机器学习_学习笔记_第二章2.3加载数据

    2.3加载数据 1.下载数据文件u.user head -3 u.user ##查看文件前几行 cat u.user |wc -l 或者 more u.user |wc -l    ##数文件记录数 ...

  9. tensor和模型 保存与加载 PyTorch

    PyTorch教程-7:PyTorch中保存与加载tensor和模型详解 保存和读取Tensor PyTorch中的tensor可以保存成 .pt 或者 .pth 格式的文件,使用torch.save ...

  10. 27Vert.X框架学习笔记

    vert.x框架学习笔记 文章目录 1 Vert.x简明介绍 1.1 Vert.x能干什么 1.2 Vert.x快速体验 1.3 Vert.x的简单介绍 1.4 Vert.x的一些优势 1.4.1 异 ...

最新文章

  1. 【剑指offer】顺时针打印矩阵
  2. Oracle数据库备份报错12514,Oracle数据库备份导出时,出错:ORA-12514
  3. 禁止Dockpanel拖动
  4. JAVAWEB技术之七过滤器
  5. python和C语言分别实现插入排序
  6. 陈睿学长在CUIT建校70周年校庆上的演讲
  7. 【POJ - 1837】Balance(dp及其优化)
  8. php 访问类的属性,PHP OOP如何访问类的父属性范围解析运算符(::)?
  9. ieee754标准_比特与信息在计算机中的表示及补码和浮点数的IEEE 754标准
  10. 基于近邻用户协同过滤算法的音乐推荐系统
  11. java学习笔记---3
  12. 第10章 十字消除(《C和C++游戏趣味编程》配套教学视频)
  13. 平面设计基本艺术表现形式有哪些
  14. 谈论机器学习中,哪种学习算法更好有意义吗?
  15. 机器学习实战(4)——训练模型
  16. 【linux内核分析与应用-陈莉君】文件系统
  17. wox开机自启_快速启动神器-wox 安装和插件配置
  18. C/C++ 混合编译 C++中的extern “C“
  19. 盘点2017全球最优秀的6款免费远程桌面软件
  20. vue使用JavaScript的Number方法或正则表达式进行表单验证,判断值是否为数字(包括整数和小数),验证值只能为小数点后一位

热门文章

  1. js 实现通过身份证获取年龄
  2. 计算机dos命令大全TXT,dos命令大全常见命令图解
  3. Java中的list集合排序方法
  4. 神通数据库最新安装教程(2021年底)
  5. python脚本编程100例_python 100例 (持续更新)
  6. Pytorch优化器全总结(二)Adadelta、RMSprop、Adam、Adamax、AdamW、NAdam、SparseAdam(重置版)
  7. 缺陷分析之缺陷引入与移除矩阵
  8. jsp内置对象 application
  9. U3D游戏包il2cpp逆向解包,apk加密资源解密
  10. django——三种方式实现文件下载