torch.hub.load自动下载预训练模型文件用以加载预训练模型

日萌社

人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)


注意:
    1.解决每次执行torch.hub.load但是每次同时又重新下载预训练模型文件的问题:
        当第一次执行torch.hub.load加载预训练模型会自动下载对应的预训练模型文件,当第一次下载完成并成功运行之后,
        后面每次再执行相同的代码时如果出现重新下载之前已经下载过的并且目录已存在的预训练模型文件的话,
        那么解决方式是只需要到C:/Users/Administrator/.cache/torch/hub/huggingface_pytorch-transformers_master
        或 /root/.cache/torch/hub/huggingface_pytorch-transformers_master
        目录中执行一次“pip install .”命令重新再次安装一次transformers之后,即使安装过程中提示transformers已经安装存在了也没关系,
        当重新执行完“pip install .”之后那么再运行torch.hub.load即不会再重新下载之前已经下载过的并且目录已存在的预训练模型文件,
        即能解决每次执行torch.hub.load每次又重新下载预训练模型文件的问题。
        预训练模型文件自动下载在:C:/Users/Administrator/.cache/torch/transformers 或 /root/.cache/torch/transformers。
        
    2.解决每次python命令执行run_glue.py但是每次同时又重新下载预训练模型文件的问题:
        解决方式同上述第一点解决每次执行torch.hub.load又重新下载预训练模型文件的问题。
        当第一次python命令执行run_glue.py模型微调文件加载预训练模型会自动下载对应的预训练模型文件,当第一次下载完成并成功运行之后,
        后面每次再执行相同的python命令执行run_glue.py时如果出现重新下载之前已经下载过的并且目录已存在的预训练模型文件的话,
        那么解决方式是只需要到C:/Users/Administrator/.cache/torch/hub/huggingface_pytorch-transformers_master
        或 /root/.cache/torch/hub/huggingface_pytorch-transformers_master
        目录中执行一次“pip install .”命令重新再次安装一次transformers之后,即使安装过程中提示transformers已经安装存在了也没关系,
        当重新执行完“pip install .”之后那么再运行torch.hub.load即不会再重新下载之前已经下载过的并且目录已存在的预训练模型文件,
        即能解决每次python命令执行run_glue.py但是每次同时又重新下载预训练模型文件的问题。
        预训练模型文件自动下载在:C:/Users/Administrator/.cache/torch/transformers 或 /root/.cache/torch/transformers。
    确定需要加载的预训练模型并安装依赖包
    能够加载哪些模型可以参考NLP中的常用预训练模型
    这里假设我们处理的是中文文本任务, 需要加载的模型是BERT的中文模型: bert-base-chinese
    在使用工具加载模型前需要安装必备的依赖包:
        pip install tqdm 
        pip install boto3 
        pip install requests 
        pip install regex 
        pip install sentencepiece 
        pip install sacremoses 
        pip install dataclasses 
        pip install tokenizers 
        pip install filelock
加载预训练模型执行torch.hub.load会自动下载对应的预训练模型文件,如果下载网速慢,也可以选择此处度娘提供好的预训练模型文件
    1.链接:https://pan.baidu.com/s/1DWNC3mOFRor4uaa7xr_uew 
      提取码:aiai 

    2.手动解压度娘下载的预训练模型文件压缩包
        window 解压到 C:/Users/Administrator/.cache 目录下
             解压后目录如下
              C:/Users/Administrator/.cache/torch/hub/huggingface_pytorch-transformers_master
              C:/Users/Administrator/.cache/torch/transformers
    
        linux 解压到 /root/.cache 目录下
             解压后目录如下
              /root/.cache/torch/hub/huggingface_pytorch-transformers_master/
              /root/.cache/torch/transformers
              
    3.解压好了之后,如果运行时仍然会重新下载的话,进入torch/hub/huggingface_pytorch-transformers_master 执行 pip install .
       如需进入某个虚拟环境安装的话,请先进入该虚拟环境再安。
       Window:activate 虚拟环境名。Linux:source activate 虚拟环境名。
       cd C:/Users/Administrator/.cache/torch/hub/huggingface_pytorch-transformers_master
       执行“pip install .”命令,会自动执行setup.py进行安装。
import torch

# 预训练模型来源
source = 'huggingface/pytorch-transformers'
# 加载的预训练模型的名字
model_name = 'bert-base-chinese'

# # 选定加载模型的哪一部分, 这里是模型的映射器
part = 'tokenizer'
tokenizer = torch.hub.load(source, part, model_name)

# 加载不带头的预训练模型
part = 'model'
model = torch.hub.load(source, part, model_name)

# 加载带有modelWithLMHead(语言模型头)的预训练模型
part = 'modelWithLMHead'
lm_model = torch.hub.load(source, part, model_name)

# 加载带有modelForSequenceClassification(分类模型头)的预训练模型
part = 'modelForSequenceClassification'
classification_model = torch.hub.load(source, part, model_name)

# 加载带有modelForQuestionAnswering(问答模型头)的预训练模型
part = 'modelForQuestionAnswering'
qa_model = torch.hub.load(source, part, model_name)
加载预训练模型时我们可以选择带头或者不带头的模型
    1.这里的'头'是指模型的任务输出层, 选择加载不带头的模型, 相当于使用模型对输入文本进行特征表示。
      不带头的意思:
            原始的Transformer结构包含4部分输入层(嵌入层/位置编码层)、编码器层、解码器层、输出层。
            那么不带头的意思就是不包含解码器层、输出层,只有输入层(嵌入层/位置编码层)、编码器层了。
            那么不带头就相当于输入原始文本 -> 经过不带头的Bert等预加载模型 -> 输出矩阵张量。
    2.选择加载带头的模型时, 有三种类型的'头'可供选择
        1.modelWithLMHead(语言模型头):
                生成式任务,如文本生成、机器翻译、阅读理解等任务。
                比如文本生成通过最后输出的概率分布来预测下一个词汇是什么,语言模型本身的训练目标是预测下一个词。
        2.modelForSequenceClassification(分类模型头):序列句子分类任务
        3.modelForQuestionAnswering(问答模型头):seq2seq模型架构
    3.不同类型的'头', 可以使预训练模型输出指定的张量维度. 如使用'分类模型头', 则输出尺寸为(1,2)的张量, 用于进行分类任务判定结果.

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

あずにゃん

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值