如何解决Pytorch:将使用顶点训练的重量恢复为正常的float32
背景:我下载了使用pytorch_pretrained_bert==0.4.0
加apex
训练的权重,现在我想将其加载到不支持顶点的框架中,并使用transformers==3.1.0
( pytorch_pretrained_bert
的新名称。
为了测试一切是否顺利,我编写了以下代码段:
import torch
import numpy as np
try:
from transformers import BertForNextSentencePrediction
except:
from pytorch_pretrained_bert import BertForNextSentencePrediction
doc = torch.tensor(np.arange(10)).reshape([1,10])
seg = torch.tensor([0]* 5 + [1] * 5).reshape([1,10])
mask = torch.tensor([1]* 5 + [0] * 5).reshape([1,10])
model = BertForNextSentencePrediction.from_pretrained("/path/to/my/ckpt")
model.eval()
scores = model(input_ids=doc,token_type_ids=seg,attention_mask=mask,print(scores)
,然后在以下环境上运行它:
-
pytorch==1.2,pytorch_pretrained_bert==0.4.0
,否apex
已安装 -
pytorch==1.2,pytorch_pretrained_bert==0.4.0
, 已安装apex
->与培训下载的检查点的环境相同 -
pytorch==1.5,transformers==3.1.0
,未安装apex
->与 框架
使用(1)和(3),我得到完全相同的输出:tensor([[-0.2002,0.0512]],grad_fn=<AddmmBackward>)
但是对于(2),我得到了不同的结果:tensor([[ 0.4332,-0.0907]],grad_fn=<AddmmBackward>)
我不确定删除顶点会如何更改推断结果...通过浏览文档,我想是因为ckpt权重存储在float16中,所以删除顶点时中断的方式有所不同吗? 如果是这样,我想知道是否有办法将f16精度权重“还原”为f32格式?
如果我的假设是错误的,请纠正我。谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。