python - 打包经过训练的神经网络的模型权重,使其可用于迁移学习
问题描述
我已经在电影数据集上训练和评估了一个神经网络。基本上,我试图使用情节、演员、评论等文本输入来预测多类因变量movie_genre 。
模型权重以格式保存在.h5
我计算机的本地路径中。让我们在这里说C:/Users/Desktop/classification_attention_layer_model.h5
。
模型结构也以单独的.json
文件格式保存在同一路径中。让我们在这里说classification_attention_layer_model.json
。
我想要的是给同事神经网络权重,并使用这些权重进行迁移学习。例如,使用我发送给他的预训练词嵌入创建一个不同的神经网络,并在密集/隐藏层之上使用这些预训练嵌入来训练他自己的电影神经网络。
我怎样才能做到这一点?我知道一种方法是向他发送.h5
带有训练嵌入权重的文件。但这是一种专业的方法吗?
我坚信 docker 可以在这方面提供帮助,但我不知道如何。或者也许一个 python 包可以解决问题。
我在网上找到的唯一相关问题是这个如何创建类似于 Imagenet 或 Noisy-student 的预训练权重模型?. 但是,他们只解释了如何保存我已经完成的模型权重。
基本上,我想在 spaCy 包使用文本创建词向量时实现它的方法。该任务在Kaggle 的课程 NLP练习 3 中进行了演示:
import spacy
import numpy as np
nlp = spacy.load('en_core_web_lg')
review_data = pd.read_csv('../input/nlp-course/yelp_ratings.csv')
vectors = np.array([nlp(review_data.text).vector for idx, review in review_data.iterrows()])
vectors.shape #(100, 300) where 100 rows and 300 are the vectors per row
解决方案
如果我是你,我会创建一个简单的小包并将其上传到 PyPI。
您可以使用此处MANIFEST.in
描述的方法将模型添加为包的一部分(如果它不大)。
不利的一面是,无论他们此时是否正在使用您的软件,都会占用用户的磁盘空间。
或者(IMO 更好),将您的权重上传到某处并通过代码使它们可下载,例如:
import yourpackage
backbone = yourpackage.yourmodel.backbone(
download=True,
pretrained=True
)
这就是torchvision
解决这个问题的方法,它似乎是一个很好的解决方案。
码头工人
在这种情况下,我认为没有意义,除非您的模型依赖于不可安装的 pip 软件,这不太可能。
推荐阅读
- .net - TS2474 (TS) 在“const”枚举声明中,成员初始化器必须是常量表达式
- openlayers - Openlayers 4.6上的多个标记具有不同的图标?
- rest - 在 Service Now 中发布附件
- python-3.x - 使用可变链接在浏览器中打开选项卡
- python-3.x - 二和python解决方案
- c++ - 在 C++ 代码中使用项目属性/宏
- python - pandas 计算子组的比例
- outlook - Microsoft Flow 将 Outlook 附件添加到 VSTS 工作项
- arcore - 如何为检测到平面时插入的 TransformableNodes 注册转换更改处理程序?
- c# - 每个 IMessageConsumer 或 IMessageProducer 是否应该有自己的 ISession?