A. PyTorch源码学习 - (13)模型的保存与加载
PyTorch中模型的保存与加载主要通过torch.save和torch.load两个核心函数实现。以下是具体细节:
模型的保存:
- 核心函数:torch.save。
- 辅助函数:使用torch._opener,torch._open_zipfile_writer,torch._open_zipfile_writer_file,torch._open_zipfile_writer_buffer等函数操作文件和流,根据文件或内存缓冲区创建流容器进行对象的保存。
- 封装过程:torch._save封装了文件的打开和写入过程,而torch._open_file_like和torch._open_file用于管理文件句柄,torch._open_buffer_writer则封装了二进制流的写入。
模型的加载:
- 核心函数:torch.load。
- 实现细节:通过torch._open_zipfile_reader读取文件,并使用torch._weights_only_unpickler作为定制的反序列化器,确保安全加载模型权重。
- 恢复位置管理:torch._get_restore_location和torch.default_restore_location用于获取和设置恢复位置,支持在多设备或分布式环境下的模型加载。
python与C++的结合:
- 绑定工具:使用PyBind11实现C++和Python接口的绑定。
- 类型定义:torch/_C/ __init__.pyi用于定义Python中类型信息的模板。
- JIT编译:torch/csrc/jit/python/init.cpp实现JIT编译系统,将C++类对象绑定到Python环境,实现高效的动态编译。
- 管理C++对象:Python负责管理C++对象的生命周期、调用C++方法,以及处理Python层面的逻辑和接口定义。
通过上述机制,PyTorch确保了模型的高效持久化与灵活加载,为深度学习模型的开发与部署提供了坚实的底层支持。
B. Python语言学习(二):CNN神经网络(CPU与GPU训练)
本文深入探索PyTorch的CNN神经网络在手写数字识别中的应用。MNIST数据集,包含了6万张训练图片和1万张测试图片,每张图片为28×28像素的0至9的手写数字,黑色背景,白色数字。
首先,导入所需程序库。
接着,下载并加载MNIST数据集。
构建卷积神经网络分为三步:初始化方法`__init__`、前向传播方法`forward`。
定义损失函数和优化器,随后进行模型训练。
模型训练通过迭代调整参数,以减小损失函数,提升模型性能。
完成训练后,使用模型进行手写数字识别。
文章最后介绍GPU训练方法,包括检查GPU设备、将模型和数据送至GPU进行训练和测试。
附上GPU版完整代码,供读者参考。
以上内容详尽介绍了从导入库、数据加载、模型构建、训练、测试直至GPU加速训练的全过程,旨在为读者提供一个全面的CNN神经网络实践指南。