AllenNLP框架学习笔记(模型篇之保存与加载)
通常,用户想在磁盘上保存并加载经过训练的模型。这就是使用
AllenNLP
的配置文件非常有用的地方,因为加载模型所需的所有内容,包括权重、配置和词汇表,都可以存储在单个tar文件中。在本章中,将介绍三种对模型进行保存与加载的方式。
手动保存与加载
为了正确地保存和加载AllenNLP
模型,我们一般需要有如下文件:
- 模型配置(用于训练模型的规范)
- 模型权重(模型的训练参数)
- 词汇表
在AllenNLP
中,模型配置由Params
类管理,可以使用to_file()
方法保存到磁盘。用户可以使用model.state_dict()
检索模型权重,并使用PyTorch
的torch.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框架学习笔记(模型篇之保存与加载)相关推荐
- Objective-C学习笔记第十五章文件加载与保存
第十五章文件加载与保存 Cocoa提供了Core Data,他能在后台处理所有文件内容 Cocoa提供了两个通用的文件处理类:属性列表和对象编码 一.属性列表类 在Cocoa中,有一类名为属性列表的对 ...
- Spark排序算法系列之(MLLib、ML)LR使用方式介绍(模型训练、保存、加载、预测)
转载请注明出处:http://blog.csdn.net/gamer_gyt 博主微博:http://weibo.com/234654758 Github:https://github.com/thi ...
- mnist手写数字模型训练、保存、加载及图片预测
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 主要过程 导入 加载数据 创建模型和训练 模型应用 总结 前言 非专业程序员,主业PLC单片机,2019年想扩充知识体 ...
- Unity学习笔记(5):动态加载Prefab
第一种方法,从Resources文件夹读取Prefab Assets/Resources文件夹是Unity中的一个特殊文件夹,在博主当前的认知里,放在这个文件夹里的Prefab可以被代码动态加载 直接 ...
- contiki学习笔记(六)contiki程序加载器和多线程库
六.contiki程序加载器 contiki程序加载器是一个用于加载和启动程序的抽象接口. Data Structures struct dsc//DSC程序描述结构. ModulesThe Cont ...
- JVM学习笔记之-类加载子系统,类的加载与类的加载过程,双亲委派机制
一 类加载器与类加载过程 类加载子系统作用 类加载器子系统负责从文件系统或者网络中加载class文件,class文件在文件开头有特定的文件标识. ClassLoader只负责class文件的加载,至于 ...
- scrapy学习笔记(三)-关于动态加载网页的爬取(序)
一.尝试 对于我要爬取的网站内容,按照网上普遍的步骤:直接通过xpath获取到对于数据,再记录到item中,只适用于静态html网页,但是如今的互联网大部分的web页面都是动态的,经常逛的网站例如京东 ...
- 深度实践SPARK机器学习_学习笔记_第二章2.3加载数据
2.3加载数据 1.下载数据文件u.user head -3 u.user ##查看文件前几行 cat u.user |wc -l 或者 more u.user |wc -l ##数文件记录数 ...
- tensor和模型 保存与加载 PyTorch
PyTorch教程-7:PyTorch中保存与加载tensor和模型详解 保存和读取Tensor PyTorch中的tensor可以保存成 .pt 或者 .pth 格式的文件,使用torch.save ...
- 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 异 ...
最新文章
- 【剑指offer】顺时针打印矩阵
- Oracle数据库备份报错12514,Oracle数据库备份导出时,出错:ORA-12514
- 禁止Dockpanel拖动
- JAVAWEB技术之七过滤器
- python和C语言分别实现插入排序
- 陈睿学长在CUIT建校70周年校庆上的演讲
- 【POJ - 1837】Balance(dp及其优化)
- php 访问类的属性,PHP OOP如何访问类的父属性范围解析运算符(::)?
- ieee754标准_比特与信息在计算机中的表示及补码和浮点数的IEEE 754标准
- 基于近邻用户协同过滤算法的音乐推荐系统
- java学习笔记---3
- 第10章 十字消除(《C和C++游戏趣味编程》配套教学视频)
- 平面设计基本艺术表现形式有哪些
- 谈论机器学习中,哪种学习算法更好有意义吗?
- 机器学习实战(4)——训练模型
- 【linux内核分析与应用-陈莉君】文件系统
- wox开机自启_快速启动神器-wox 安装和插件配置
- C/C++ 混合编译 C++中的extern “C“
- 盘点2017全球最优秀的6款免费远程桌面软件
- vue使用JavaScript的Number方法或正则表达式进行表单验证,判断值是否为数字(包括整数和小数),验证值只能为小数点后一位