【Python高级编程】Pickle实现AI算法训练的权重数据的保存

任务描述

在这里插入图片描述

代码实现

import pickle
import time
import os
import numpy as np# 模拟耗时的权重计算过程
def calculate_weights():print("开始计算权重...")time.sleep(5)  # 模拟耗时操作,暂停5秒以模拟计算过程weights = np.random.rand(10, 10)  # 随机生成一个10x10的权重矩阵print("权重计算完成.")return weights# 保存权重和epoch到文件
def save_weights(weights, epoch, filename='weights.pkl'):data = {'weights': weights, 'epoch': epoch}  # 将权重和epoch打包成字典with open(filename, 'wb') as f:  # 以二进制写模式打开文件pickle.dump(data, f)  # 使用pickle将数据序列化并保存到文件print(f"权重和epoch已保存到{filename}.")# 从文件加载权重和epoch
def load_weights(filename='weights.pkl'):with open(filename, 'rb') as f:  # 以二进制读模式打开文件data = pickle.load(f)  # 使用pickle从文件中反序列化数据print(f"权重和epoch已从{filename}加载.")return data['weights'], data['epoch']  # 返回权重和epoch数据# 主程序
def main():weights_file = 'weights.pkl'  # 权重文件名total_epochs = 100  # 假设我们总共需要训练100个epochs# 如果权重文件存在,则加载权重和epochif os.path.exists(weights_file):weights, start_epoch = load_weights(weights_file)  # 从文件加载权重和训练的epoch数else:# 否则,从第一个epoch开始,并计算权重weights = calculate_weights()  # 计算权重start_epoch = 0  # 从第0个epoch开始# 继续训练剩余的epochsfor epoch in range(start_epoch, total_epochs):print(f"开始训练epoch {epoch}...")# 这里进行实际的训练代码...time.sleep(1)  # 模拟训练过程,暂停1秒以模拟每个epoch的训练时间print(f"完成训练epoch {epoch}.")# 每个epoch结束后保存权重和epoch信息save_weights(weights, epoch, weights_file)  # 保存当前的权重和epoch信息if __name__ == '__main__':main()

代码解释

  1. 导入必要的模块

    import pickle
    import time
    import os
    import numpy as np
    
  2. 定义权重计算函数

    def calculate_weights():print("开始计算权重...")time.sleep(5)  # 模拟耗时操作,暂停5秒weights = np.random.rand(10, 10)  # 生成一个10x10的随机权重矩阵print("权重计算完成.")return weights
    
  3. 定义保存权重和epoch到文件的函数

    def save_weights(weights, epoch, filename='weights.pkl'):data = {'weights': weights, 'epoch': epoch}  # 将权重和epoch打包成字典with open(filename, 'wb') as f:  # 以二进制写模式打开文件pickle.dump(data, f)  # 使用pickle将字典序列化并写入文件print(f"权重和epoch已保存到{filename}.")
    
  4. 定义从文件加载权重和epoch的函数

    def load_weights(filename='weights.pkl'):with open(filename, 'rb') as f:  # 以二进制读模式打开文件data = pickle.load(f)  # 使用pickle从文件中反序列化数据print(f"权重和epoch已从{filename}加载.")return data['weights'], data['epoch']  # 返回权重和epoch数据
    
  5. 主程序逻辑

    def main():weights_file = 'weights.pkl'  # 定义权重文件的名称total_epochs = 100  # 假设我们需要训练100个epochs# 检查权重文件是否存在if os.path.exists(weights_file):weights, start_epoch = load_weights(weights_file)  # 如果存在,加载权重和epochelse:weights = calculate_weights()  # 如果不存在,计算权重start_epoch = 0  # 从第0个epoch开始# 继续训练剩余的epochsfor epoch in range(start_epoch, total_epochs):print(f"开始训练epoch {epoch}...")time.sleep(1)  # 模拟训练过程,暂停1秒print(f"完成训练epoch {epoch}.")# 每个epoch结束后保存权重和epoch信息save_weights(weights, epoch, weights_file)  # 保存当前的权重和epoch信息# 如果该脚本作为主程序运行,则执行main函数
    if __name__ == '__main__':main()
    

该程序用于模拟长时间训练模型的过程,其中包括计算权重、训练模型、保存和加载权重以及当前训练的epoch。通过使用pickle模块,程序能够在中途停止并在重新启动时从上次停止的地方继续运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/28933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI产品经理,应掌握哪些技术?

美国的麻省理工学院(Massachusetts Institute of Technology)专门负责科技成果转化商用的部门研究表明: 每一块钱的科研投入,需要100块钱与之配套的投资(人、财、物),才能把思想转化为产品&…

flutter开发实战-创建一个微光加载效果

flutter开发实战-创建一个微光加载效果 当加载数据的时候,loading是必不可少的。从用户体验(UX)的角度来看,最重要的是向用户展示加载正在进行。向用户传达数据正在加载的一种流行方法是在与正在加载的内容类型近似的形状上显示带…

货代小白快来收藏‼️普货与非普货的区别

普货是指不属于以下类别的普通货物 危险品 冷冻/冷藏品 违禁品 仿牌货 敏感货 危险品 危险品具体分为九类: 爆炸品 压缩气体 易燃液体 易燃固体、易燃物品和遇湿易燃物品 氧化剂和有机氧化物 有毒和感染性物品 放射性 腐蚀性 杂类 冷冻/冷藏品 主要是指以食品为主的…

简述spock以及使用

1. 介绍 1.1 Spock是什么? Spock是一款国外优秀的测试框架,基于BDD(行为驱动开发)思想实现,功能非常强大。Spock结合Groovy动态语言的特点,提供了各种标签,并采用简单、通用、结构化的描述语言…

php配合fiddler批量下载淘宝天猫商品数据分享

有个做电商的朋友问我,每次上款,需要手动去某宝去搬运商品图片视频,问我能不能帮忙写个脚本,朋友开口了,那就尝试一下 首先打开某宝,访问一款商品,找出他的数据来源 通过观察我们发现主图数据来这个接口输出 h5api.m.taobao.com/h5/mtop.taobao.pcdetail.data.get/1.0 …

如何学习创建和使用 Java 归档(JAR)文件

1. 简介 JAR(Java ARchive)文件是一种用于打包多个Java类、资源文件和元数据的压缩文件格式。它在Java开发和发布过程中扮演着重要角色。通过使用JAR文件,开发者可以将应用程序的所有组件打包在一个文件中,方便分发和部署。 2. …

世界森林覆盖率分布图

原文链接https://mp.weixin.qq.com/s?__bizMzUyNzczMTI4Mg&mid2247680287&idx1&sn6ac57fa7472fc58cad1d5ab11b1d6b3b&chksmfa775e22cd00d7341e4f59d52221fb7f9a8e2d83602ab58719481af66b2f3b153c57f01c68bb&token808263816&langzh_CN&scene21#wec…

开源语音合成模型ChatTTS本地部署结合内网穿透实现远程访问

文章目录 前言1. 下载运行ChatTTS模型2. 安装Cpolar工具3. 实现公网访问4. 配置ChatTTS固定公网地址 前言 本篇文章就教大家如何快速地在Windows中本地部署ChatTTS,并且我们还可以结合Cpolar内网穿透实现公网随时随地访问ChatTTS AI语言模型。 最像人声的AI来了&a…

Airflow任务流调度

0 前言 Airflow是Airbnb内部发起的一个工作流管理平台。使用Python编写实现的任务管理、调度、监控工作流平台。Airflow的调度依赖于crontab命令,与crontab相比,Airflow可以方便地查看任务的执行状况(执行是否成功、执行时间、执行依赖等&…

基于OCC+OSG的读取IGS模型显示其装配以及模型颜色

一般来说,读取STP模型会解析其装配结构,而读取IGS模型时候一般不这么做,因为IGS的每个部件大多是面片,而非一个实体模型,所以比如一些开源软件,比如Freecad等都是直接将模型作为一个整体并且在模型树上只显…

Elixir学习笔记——try, catch, and rescue

Elixir 有三种错误机制:errors, throws, and exits。在本章中,我们将探索每种机制,并说明何时应使用它们。 Errors 当代码中发生异常时,就会使用错误(或异常)。可以通过尝试将数字添加到原子来检索示例错…

生活好物:日常更精彩

我们的日用杂货店,是生活美学的聚集地。这里汇聚了各式各样的生活用品,每一件都蕴含着对生活的热爱与追求。 走进我们的日用杂货店,仿佛打开了一个充满生活气息的宝藏盒。从厨房的锅碗瓢盆,到浴室的洗漱用品,再到客厅的…

6.17 作业

使用qt实现优化自己的登录界面 要求: 1. qss实现 2. 需要有图层的叠加 (QFrame) 3. 设置纯净窗口后,有关闭等窗口功能。 4. 如果账号密码正确,则实现登录界面关闭,另一个应用界面显示。 第一个源文件 …

9.无代码爬虫软件做网页数据抓取流程——弹出窗口的移除

首先,多数情况下免费版本的功能,已经可以满足绝大多数采集需求,想了解八爪鱼采集器版本区别的详情,请访问这篇帖子: https://blog.csdn.net/cctv1123/article/details/139581468 八爪鱼采集器免费版和个人版、团队版下…

反射复习(java)

文章目录 反射机制的作用反射机制的原理加载机制详细解释 获取 Class 对象反射获取构造方法:获取 Class 对象里面 Constructor 对象反射获取成员变量:获取Class 对象里面的 Field 对象反射获取成员方法:获取 Class 对象里的 Method 对象其他常…

15.编写自动化测试(下)

标题 三、控制测试流程3.1 添加测试参数3.2 并行或连续运行测试3.3 显示函数输出3.4 指定/过滤测试用例名称3.5 忽略某些测试用例3.6 只运行被忽略的测试 四、测试的组织结构4.1 概念引入4.2 测试私有函数4.2 单元测试4.3 集成测试4.4 集成测试中的子模块4.5 二进制crate的集成…

Python脚本中使用 if 语句导致的错误代码

在 Python 脚本中使用 if 语句是一种常见的控制流程结构,用于根据条件决定程序的执行路径。当使用 Python 中的 if 语句时,可能会导致一些常见的错误。下面就是我经常遇到的错误代码示例及其可能的原因和解决方法,希望对大家有些帮助&#xf…

死锁预防之银行家算法

死锁预防之银行家算法 第一章 概述 Dijkstra提出了一种能够避免死锁的调度算法,称为银行家算法。 它的模型基于一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,每个客户都有一个贷款额度,银行家知道不可能所有客户同时都需要最大贷款额,所以他只保留一定单位…

韩国职场新趋势:员工拒绝晋升,追求工作与生活的平衡

在当前职场环境中,晋升通常被视为职业生涯发展的重要里程碑。然而,据韩国《今日财经》报道,现代重工工会在今年的劳资谈判中提出了一个令人关注的要求——“拒绝晋升权”。这一要求反映了韩国职场的新趋势,即越来越多的员工对高薪…

长期保存红酒的挑战与应对策略

云仓酒庄雷盛红酒,以其卓着的品质和口感,赢得了无数葡萄酒爱好者的喜爱。然而,对于那些希望长期保存这些珍贵佳酿的人来说,如何确保红酒的品质和风味不受时间的影响,却是一项充满挑战的任务。 长期保存红酒的大挑战来自…