首页 > 解决方案 > 打包经过训练的神经网络的模型权重,使其可用于迁移学习

问题描述

我已经在电影数据集上训练和评估了一个神经网络。基本上,我试图使用情节、演员、评论等文本输入来预测多类因变量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

标签: pythontensorflowkerasneural-network

解决方案


如果我是你,我会创建一个简单的小包并将其上传到 PyPI。

您可以使用此处MANIFEST.in描述的方法将模型添加为包的一部分(如果它不大)。

不利的一面是,无论他们此时是否正在使用您的软件,都会占用用户的磁盘空间。

或者(IMO 更好),将您的权重上传到某处并通过代码使它们可下载,例如:

import yourpackage

backbone = yourpackage.yourmodel.backbone(
    download=True, 
    pretrained=True
)

这就是torchvision解决这个问题的方法,它似乎是一个很好的解决方案。

码头工人

在这种情况下,我认为没有意义,除非您的模型依赖于不可安装的 pip 软件,这不太可能。


推荐阅读