当前位置: 首页 > news >正文

Python中pickle文件操作及案例-学习篇

一、简介

Pickle 算是Python的一种数据序列化方法,它能够将对象转换为字节流,进而可以保存到文件中或通过网络传输给其他Python程序。这种方式非常适合快速简便地保存复杂的数据结构,例如列表、字典、自定义对象等。

二、pickle文件的读写

示例代码如下:

import pickle #导入pickle操作的库
#创建一个示例数据
data={'name':'Tom','age':30,'is_student': False,'grades':[11,12,13]
}#使用pickle保存数据到硬盘
with open('data.pkl','wb') as file:pickle.dump(data,file)#使用pickle加载数据
with open('data.pkl','rb') as file:loaded_data=pickle.load(file)
print(loaded_data) #打印出读取结果

执行一遍后,data的json数据就会被保存到磁盘,下次读取可直接读取内容

案例分析

案例背景:
当训练人工智能算法时,往往需要很长的时间,当训练中断时,如果
能提前做好权重保存功能,能很快的恢复上次进度,以继续进行训练,请实时保存权重计算完成后的数据

代码如下:

import pickle #序列化数据到硬盘
import time #模拟训练的时间调用
import os  #判断文件存不存在使用
import numpy as np #用来计数#模拟耗时计算的全过程
def calculate_weights():print("开始计算权重。。。")time.sleep(5) #模拟耗时操作weight = np.random.rand(10,10) #随机生成权重print("权重计算完成")return weight#保存权重和epoch文件到硬盘
def save_weights(weights,epoch,filename='weights.pkl'):data = {'epoch':epoch,'weights':weights}with open(filename,'wb') as f:pickle.dump(data,f)print(f"权重和epoch已经保存到{filename}")#从硬盘加载权重和epoch
def load_weights(filename='weights.pkl'):with open(filename,'rb') as f:data = pickle.load(f)print(f"权重和epoch已经从{filename}加载")return data["weights"],data["epoch"]#主程序
def main():weight_file = "weights.pkl"total_epochs = 100 #假设总共需要训练100个epochs#如果权重文件存在,则加载权重和epochif os.path.exists(weight_file):weights,start_epoch = load_weights(weight_file)else:#从第一个epoch开始,并计算权重weights = calculate_weights()start_epoch = 0#继续训练剩余的epochsfor epoch in range(start_epoch,total_epochs):print(f"开始训练epoch{epoch}...")#这里进行实际的训练代码time.sleep(1) #模拟训练过程#每个epoch结束后保存权重和epoch信息save_weights(weights,epoch,weight_file)if __name__ == '__main__':main()

代码执行如下:
第一次执行时计算初始权重,后续权重依次写入文件
在这里插入图片描述
中断后重新执行程序,程序会读取已保存的权重数据,继续后延保存
在这里插入图片描述


http://www.mrgr.cn/news/21390.html

相关文章:

  • tb-nightly库安装报错
  • sobel_dir 方向图和sobel的一些想法
  • 视频编辑的新助手:基于大模型的智能代理
  • c++高级编程第2版pdf
  • vue项目打包后,生成的index.html直接本地打开后没内容
  • Track 06:量子计算机概述
  • [SDK]-组合框 和 列表框控件
  • stack smashing detect以及解决之道
  • VMware17 虚拟机下载以及 CentOS8 操作系统安装配置 一条龙全教程
  • 新 MacBook 装机必备,不可缺少的效率 App:剪贴板增强——CleanClip
  • 暑期档总结:哪部国漫年番表现更优?
  • Neighborhood Homophily-based Graph Convolutional Network
  • 基于人工智能的聊天情感分析系统
  • JavaScript基础面试题:(第三天)
  • 2.2.3 UDP的可靠传输协议QUIC 1
  • 正负极层数更新器
  • 【机器学习-监督学习】决策树
  • 2024年 Biomedical Signal Processing and Control 期刊投稿经验最新分享
  • 开放式蓝牙耳机哪个品牌好用?盘点五款超优秀的开放式耳机!
  • Linux_kernel移植linux09