请问应该如何转成pyTorch格式?
Dongfeng-He opened this issue · 21 comments
感谢作者开源,请问目前支持tensorflow模型转pyTorch模型吗?尝试使用pytorch-transformer的转换工具进行模型转换并不成功。
报什么错误呢?
跟加载bert模型一样,可以转换成功,不过bert模型的参数设置需要根据roberta更改
好的,roberta没有特别的参数,参数和bert是一样的,只有跟加载词汇表(vocab.txt)和配置文件(bert_config_xxx.json)
能否把转PyTorch的代码在这里的方法在这里贴一下,稍后新的模型我也转一下。
可参考https://github.com/guoday/CCF-BDCI-Sentiment-Analysis-Baseline 转化该项目的tf模型为pytorch模型
创建模型时,config和开源的roberta一致就可以
from pytorch_transformers import RobertaConfig, RobertaModel, load_tf_weights_in_bert
config = RobertaConfig(num_hidden_layers=24, vocab_size_or_config_json_file=21128)
model = RobertaModel(config)
load_tf_weights_in_bert(model, config, "roeberta_zh_L-24_H-768_A-12")
我用的转换方法:
from pytorch_transformers import convert_roberta_checkpoint_to_pytorch
roberta_checkpoint_path = "/root/roberta/"
pytorch_dump_folder_path = "/root/roberta/output/"
classification_head = False
convert_roberta_checkpoint_to_pytorch.convert_roberta_checkpoint_to_pytorch(roberta_checkpoint_path, pytorch_dump_folder_path, classification_head)
/root/roberta/
是存放该项目权重的路径
当roberta_checkpoint_path = "/root/roberta/"
报错OSError: Model file not found: /root/roberta/model.pt
当roberta_checkpoint_path = "/root/roberta/checkpoint"
报错tarfile.ReadError: truncated header
当roberta_checkpoint_path = "/root/roberta/bert_model.data-00000-of-00001"
报错tarfile.CompressionError: unknown compression type 'data-00000-of-00001'
各种方法都试了一下,没有成功。
@guoday,我看到这个项目里对RoBERTa的转换还是沿用BERT的转换脚本,也就是pytorch_transformers.convert_tf_checkpoint_to_pytorch
,我试试这个方法是不是可行,非常感谢!
这个是行不通的,pytorch transformer里面的convert_roberta_checkpoint_to_pytorch是提供转换fairseq模型的,不是tensorflow模型的,roberta和bert模型没有变化,所以用转换bert的方法即可。
@zuofeng1997 非常感谢!请问我能沿用BertConfig和BertModel吗?还是必须要用RobertaConfig, RobertaModel?
这个load_tf_weights_in_bert(model, config, "roeberta_zh_L-24_H-768_A-12")是用来代替BertModel.from_pretrained的吗?还是跳过模型转换直接在pyTorch里加载tensorflow的模型?
能用BERTMODEL,模型的转换用的就是load_tf_weights_in_bert方法,所以没有区别
@zuofeng1997 感谢感谢!
这个模型是可以在pytorch里面加载运行的。
用Transformer2.0库,实例化BertTokenizer、BertConfig、BertForSequenceClassification(分类)就可以了。
tokenizer = BertTokenizer.from_pretrained('RoBERTa/vocab.txt')
config = BertConfig.from_pretrained('RoBERTa/config.json')
model = BertForSequenceClassification.from_pretrained('RoBERTa/pytorch_model.bin', config=config)
中文版的RoBERTa模型,不能用Transformer2.0中Roberta相关类进行实例化加载。
这个模型是可以在pytorch里面加载运行的。
用Transformer2.0库,实例化BertTokenizer、BertConfig、BertForSequenceClassification(分类)就可以了。tokenizer = BertTokenizer.from_pretrained('RoBERTa/vocab.txt')
config = BertConfig.from_pretrained('RoBERTa/config.json')
model = BertForSequenceClassification.from_pretrained('RoBERTa/pytorch_model.bin', config=config)中文版的RoBERTa模型,不能用Transformer2.0中Roberta相关类进行实例化加载。
为什么不能用呢.. roberta 中有一个merge.txt文件。但是直接下载的pytorch版本的roberta没有这个文件..不太清楚这个文件时干嘛用的
你用transformer加载模型一下,使用名称选BERT.
这个模型是可以在pytorch里面加载运行的。
用Transformer2.0库,实例化BertTokenizer、BertConfig、BertForSequenceClassification(分类)就可以了。
tokenizer = BertTokenizer.from_pretrained('RoBERTa/vocab.txt')
config = BertConfig.from_pretrained('RoBERTa/config.json')
model = BertForSequenceClassification.from_pretrained('RoBERTa/pytorch_model.bin', config=config)
中文版的RoBERTa模型,不能用Transformer2.0中Roberta相关类进行实例化加载。为什么不能用呢.. roberta 中有一个merge.txt文件。但是直接下载的pytorch版本的roberta没有这个文件..不太清楚这个文件时干嘛用的
你要用加载bert的类去加载RoBerta
这个模型是可以在pytorch里面加载运行的。
用Transformer2.0库,实例化BertTokenizer、BertConfig、BertForSequenceClassification(分类)就可以了。tokenizer = BertTokenizer.from_pretrained('RoBERTa/vocab.txt')
config = BertConfig.from_pretrained('RoBERTa/config.json')
model = BertForSequenceClassification.from_pretrained('RoBERTa/pytorch_model.bin', config=config)中文版的RoBERTa模型,不能用Transformer2.0中Roberta相关类进行实例化加载。
我尝试了确实不可以,但是是为什么呢?全网也搜不到相关信息。
@DefuLi
有相关的资料可以推荐阅读吗?
你说的没错。 中文版的roberta是用transformer2.0库中的bert加载模板的。 至于为什么这样,你看一下roberta的官方说明,上面有讲到。
…
---原始邮件--- 发件人: "Qian Xin"<notifications@github.com> 发送时间: 2020年10月3日(周六) 下午5:15 收件人: "brightmart/roberta_zh"<roberta_zh@noreply.github.com>; 抄送: "Defu Li"<defuli.go@qq.com>;"Comment"<comment@noreply.github.com>; 主题: Re: [brightmart/roberta_zh] 请问应该如何转成pyTorch格式? (#9) 这个模型是可以在pytorch里面加载运行的。 用Transformer2.0库,实例化BertTokenizer、BertConfig、BertForSequenceClassification(分类)就可以了。 tokenizer = BertTokenizer.from_pretrained('RoBERTa/vocab.txt') config = BertConfig.from_pretrained('RoBERTa/config.json') model = BertForSequenceClassification.from_pretrained('RoBERTa/pytorch_model.bin', config=config) 中文版的RoBERTa模型,不能用Transformer2.0中Roberta相关类进行实例化加载。 我尝试了确实不可以,但是是为什么呢?全网也搜不到相关信息。 — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.
十分感谢!
查到了,谢谢
这个模型是可以在pytorch里面加载运行的。
用Transformer2.0库,实例化BertTokenizer、BertConfig、BertForSequenceClassification(分类)就可以了。tokenizer = BertTokenizer.from_pretrained('RoBERTa/vocab.txt')
config = BertConfig.from_pretrained('RoBERTa/config.json')
model = BertForSequenceClassification.from_pretrained('RoBERTa/pytorch_model.bin', config=config)中文版的RoBERTa模型,不能用Transformer2.0中Roberta相关类进行实例化加载。
查到了,谢谢
请问下您是怎么加载robert的 我没有看懂
这个是行不通的,pytorch transformer里面的convert_roberta_checkpoint_to_pytorch是提供转换fairseq模型的,不是tensorflow模型的,roberta和bert模型没有变化,所以用转换bert的方法即可。
你好,我在用该函数将roberta-base的fairseq模型转为pytorch模型时,出现了一个问题“'RobertaHubInterface' object has no attribute 'args'”,具体如facebookresearch/fairseq#4337,请问您知道怎么解决吗