当前位置:   article > 正文

保存没有压缩的原始模型和及其模型状态、保存压缩后的模型和及其模型状态、加载没有压缩的原始模型文件和及其模型状态、加载压缩后的模型和及其模型状态_keras生成bin文件格式的模型

keras生成bin文件格式的模型

日萌社

 

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


保存没有压缩的原始模型和及其模型状态、保存压缩后的模型和及其模型状态、加载没有压缩的原始模型文件和及其模型状态、加载压缩后的模型和及其模型状态

Pytorch:模型保存与加载方式


  1. """
  2. pytorch_model.bin模型状态(字典数据)文件、xx.pt、xx.pkl 的区别
  3. 1.xx.pt、xx.pkl均是torch.save(model.state_dict(), "./xx.pt" 或 "./xx.pkl" ) 保存的 模型状态(字典数据)文件
  4. 2.pytorch_model.bin实际也为模型状态(字典数据)文件,保存的权重数据(状态字典数据) 实际和 xx.pt/xx.pkl 这样的模型状态(字典数据)文件 的作用是一样的。
  5. 3.通过save_pretrained("保存路径")所保存的默认文件pytorch_model.bin 的文件大小 实际和
  6. 使用 torch.save(model.state_dict(), "./xx.pt" 或 "./xx.pkl" )所保存的模型状态(字典数据)文件的文件大小 是一样的,
  7. 也就是 pytorch_model.bin模型状态(字典数据)文件 和 xx.pt/xx.pkl 等不同类型的模型状态(字典数据)文件 都可以保存模型的状态字典数据,
  8. 并且不管使用哪种类型的模型状态(字典数据)文件,他们的文件大小都是一致的。
  9. 1.BertTokenizer.from_pretrained:实际自动加载的是vocab.txt
  10. BertForSequenceClassification.from_pretrained:实际自动加载的是pytorch_model.bin模型状态文件
  11. 2.保存没有压缩的/压缩后的模型的模型状态(字典数据)、加载没有压缩的/压缩后的模型状态(字典数据)
  12. 1.保存没有压缩的原始模型的模型状态(字典数据)
  13. torch.save(model.state_dict(), "./xx.pt" 或 "./xx.pkl")
  14. 2.加载没有压缩的原始模型的模型状态(字典数据)
  15. model = 模型类Model()
  16. model.load_state_dict(torch.load("./xx.pt" 或 "./xx.pkl"))
  17. 3.对原始模型应用动态量化技术进行模型压缩,使用save_pretrained把压缩后的模型的模型状态(字典数据)存储到本地默认的pytorch_model.bin文件
  18. #应用动态量化技术:
  19. # 使用torch.quantization.quantize_dynamic获得动态量化的模型
  20. # 量化的网络层为所有的nn.Linear的权重,使其成为int8
  21. #quantize_dynamic输入的为没有压缩的原始模型,quantize_dynamic输出的为压缩后的模型
  22. quantized_model = torch.quantization.quantize_dynamic(model, {torch.nn.Linear}, dtype=torch.qint8)
  23. # 使用save_pretrained保存压缩后的模型的模型状态到本地文件,文件名默认为pytorch_model.bin
  24. quantized_model.save_pretrained("./bert_finetuning_test/quantized")
  25. 4.加载压缩后的模型的模型状态(字典数据)文件
  26. # 实际加载的是"./bert_finetuning_test/quantized"目录下的vocab.txt
  27. tokenizer_load_model = BertTokenizer.from_pretrained("./bert_finetuning_test/quantized", do_lower_case=configs_load_model.do_lower_case)
  28. # 加载带有文本分类头的BERT模型:实际加载的是"./bert_finetuning_test/quantized"目录下的pytorch_model.bin模型状态(字典数据)文件
  29. quantized_load_model = BertForSequenceClassification.from_pretrained("./bert_finetuning_test/quantized")
  30. # 因为加载的为压缩后的模型的模型状态(字典数据)文件,因此此处需要使用动态量化技术
  31. quantized_load_model = torch.quantization.quantize_dynamic(quantized_load_model, {torch.nn.Linear}, dtype=torch.qint8)
  32. # 可以选择加载pytorch_model.bin模型状态(字典数据)文件,或者选择加载pt/pkl文件也可以
  33. state = torch.load("./pytorch_model.bin" 或 "./xx.pt或./xx.pkl")
  34. # 把模型状态(字典数据) 加载到模型中
  35. quantized_load_model.load_state_dict(state)
  36. """
  37. ##############
  38. # 加载量化模型
  39. ##############
  40. # 加载BERT预训练模型的数值映射器
  41. # 实际加载的是"./bert_finetuning_test/quantized"目录下的vocab.txt
  42. tokenizer_load_model = BertTokenizer.from_pretrained("./bert_finetuning_test/quantized", do_lower_case=configs.do_lower_case)
  43. # 加载带有文本分类头的BERT模型
  44. # 加载带有文本分类头的BERT模型:实际加载的是"./bert_finetuning_test/quantized"目录下的pytorch_model.bin模型状态(字典数据)文件
  45. quantized_load_model = BertForSequenceClassification.from_pretrained("./bert_finetuning_test/quantized")
  46. # 应用动态量化技术:
  47. # 使用torch.quantization.quantize_dynamic获得动态量化的模型
  48. # 量化的网络层为所有的nn.Linear的权重,使其成为int8
  49. quantized_load_model = torch.quantization.quantize_dynamic(quantized_load_model, {torch.nn.Linear}, dtype=torch.qint8)
  50. #实际加载的pytorch_model.bin该文件仍然是模型的状态字典的文件,并不是包含模型结构的文件
  51. quantized_load_model.load_state_dict(torch.load("./bert_finetuning_test/quantized/pytorch_model.bin"))
  52. # quantized_load_model.load_state_dict(torch.load("./quantized_model.pt"))
  53. # print(quantized_load_model)
  54. # 将模型传到制定设备上
  55. quantized_load_model.to(configs_load_model.device)
  56. #对比压缩后的模型的推理准确性和耗时
  57. #获得模型评估结果和运行时间
  58. time_model_evaluation(quantized_load_model, configs_load_model, tokenizer_load_model)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/772657
推荐阅读
  

闽ICP备14008679号