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

news2024/10/30 1:27:02

任务描述

在这里插入图片描述

代码实现

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

    # 如果权重文件存在,则加载权重和epoch
    if os.path.exists(weights_file):
        weights, start_epoch = load_weights(weights_file)  # 从文件加载权重和训练的epoch数
    else:
        # 否则,从第一个epoch开始,并计算权重
        weights = calculate_weights()  # 计算权重
        start_epoch = 0  # 从第0个epoch开始

    # 继续训练剩余的epochs
    for 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)  # 如果存在,加载权重和epoch
        else:
            weights = calculate_weights()  # 如果不存在,计算权重
            start_epoch = 0  # 从第0个epoch开始
    
        # 继续训练剩余的epochs
        for 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.coloradmin.cn/o/1844314.html

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

相关文章

RealityCheck™电机监测和预测性维护模型

RealityCheck™电机 一个附加的软件工具箱,可实现条件监测和预测性维护功能,而无需依赖额外的传感器。相反,它使用来自电机控制过程的电子信息作为振动和其他传感器的代理。凭借其先进的信号处理和机器学习(ML)模型,RealityCheck …

[AIGC] 使用Google的Guava库中的Lists工具类:常见用法详解

在Java程序设计中,集合是我们最常用的数据结构之一。为了方便我们操作集合,Google的Guava库提供了一个名为Lists的工具类,它封装了许多用于操作List对象的实用方法。在本文中,我们将详细介绍其常见的用法,以帮助您更好…

S级猫主食冻干测评出来了:希喂、K9、朗诺实测分享

对于许多宠物主人来说,一到挑选主食冻干就头疼。尽管主食冻干为猫咪带来的益处远超过普通猫粮,但其价格也相对较高。因此,许多宠物主人担心高价购买的主食冻干营养价值并不高。实际上,除了营养,安全性和配方也是选购时…

【课程系列04】某客时间AI大模型应用开发实战营

网盘链接 https://pan.baidu.com/s/1blR1eIMDIIp6AbxU4YaK9w 课程收获 "AI大模型应用开发实战营"是一个为期八周的在线课程,旨在教授学员如何开发和应用AI大模型。课程内容从基础理论到实际应用,逐步深入,覆盖了以下要点&#x…

推荐一个大佬们都在用的IDE主题-Dracula Theme

Dracula主题 对于颜色的主题,每个人的喜欢都有所区别,我喜欢Dracula主题,基本IDE编辑器能配置的都会配置这个主题颜色。然后偶然有一天我发现这个网站:https://draculatheme.com/。才发现Dracula不再仅仅只是个主题了&#xff0c…

有了它,再也不用为客户管理而烦恼

在竞争激烈的市场环境中,有效的客户关系管理(CRM)系统是企业获取商机、提高成单效率的关键。搭贝CRM管理系统是基于市场业务需求量身定制的,通过记录客户360度画像和跟进信息,实现客户管理的精细化和高效流转。 &#…

Linux:文件描述符

文件描述符实际上就是一个小整数 0 & 1 & 2 Linux进程默认情况下会有3个缺省打开的文件描述符,分别是标准输入0, 标准输出1, 标准错误2. 0,1,2对应的物理设备一般是:键盘,显示器,显示器 所以输入输…

为电脑小白推荐的5款实用工具软件

​ 电脑上的各类软件有很多,除了那些常见的大众化软件,还有很多不为人知的小众软件,专注于实用功能,简洁干净、功能强悍。 1.磁盘空间分析——TreeSize Free ​ TreeSize Free是一款免费的磁盘空间分析工具,能够扫描…

深度学习模型训练中 学习率参数 设置大小问题及设置合适值

💪 专业从事且热爱图像处理,图像处理专栏更新如下👇: 📝《图像去噪》 📝《超分辨率重建》 📝《语义分割》 📝《风格迁移》 📝《目标检测》 📝《暗光增强》 &a…

对30年国债利率破2.5%的复盘反思

短期看,以月为维度,长端和超长端利率依然具有较强的向下突破的惯性;中期看,以季为维度,长端依然面临向下赔率不足的约束,但调整需要多重利空共振的契机。 短期看多,逢高配置”的四点逻辑 逻辑一…

SpringBoot:SpringBoot集成Druid监控慢SQL

一、前言 数据库连接池是一个至关重要的组成部分,一个优秀的数据库连接池可以显著提高应用程序的性能和可伸缩性。常见的连接池:Druid、HikariCP、C3P0、DBCP等等,不过目前大部分都是使用Druid或者SpringBoot默认的HikariCP! 本文…

计算机网络 交换机的基本配置

一、理论知识 1.三种模式: ①用户模式:当登录路由器后,系统自动进入用户EXEC命令模式。 例如: Router> 在用户模式状态下,用户只能查看路由器的连接状态和基本信息,访问其他网络和主机&#xff0c…

lombok常用注解使用与原理

什么是lombok 一个优秀的Java代码库&#xff0c;简化了Java的编码&#xff0c;为Java代码的精简提供了一种方式 使用方法&#xff1a;pom文件中引入依赖 <!--scope&#xff1a;provided&#xff0c;只在编译阶段生效&#xff0c;不需要打入包中--> <dependency>…

AI 编译器技术分享会:上海交大/中科院计算所/微软亚研/智源,他们来了!

4 场 Meetup、3 个城市、19 位嘉宾、1k 行业从业者、累计 100w 曝光&#xff0c; 2023 年 AI 编译器社区小小刷新了一下存在感&#xff0c;我们在非常细分的领域里找到了最为垂直的开发者和工程师&#xff0c;从 0 到 1 建立起一个个小据点&#xff0c;搭建交流平台、促成企内合…

求最小生成树的新算法

不管 prim 算法还是 kruskal 算法都基于 “当前可见最短边” 作贪心策略&#xff0c;但这并不适合分布式并行操作&#xff0c;比方说所有节点一起构建最小生成树&#xff0c;这些算法都显得同步开销过大&#xff0c;甚至导出错误的结果。 最近研究并构建最大流多路径传输协议的…

韩顺平0基础学Java——第27天

p548-568 明天开始坦克大战 Entry 昨天没搞明白的Map、Entry、EntrySet&#xff1a;//GPT教的 Map 和 Entry 的关系 1.Map 接口&#xff1a;它定义了一些方法来操作键值对集合。常用的实现类有 HashMap、TreeMap 等。 2. Entry接口&#xff1a;Entry 是 Map 接口的一个嵌…

【高等数学】傅里叶级数

最近刷了会抖音&#xff0c;看到一个非常有趣的现象&#xff1a;傅里叶级数&#xff0c;今天挑了几个视频来供大家学习。 1.傅里叶级数概念 【小崔说数】傅里叶级数专题https://www.bilibili.com/video/BV1Uq4y1q7xk?t117.4 2.傅里叶级数动画 【谜之舒适】12分钟的傅立叶级…

编译原理:语法分析(语法制导翻译)、语义分析(类型检查、中间代码生成)

编译器在做语法分析的过程中&#xff0c;除了回答程序代码的语法是否合法&#xff08;LL,LR能否接收&#xff09;外&#xff0c;还需要完成后续的工作&#xff08;包括构建语法树、类型检查、中间代码生成、目标代码生成&#xff09;&#xff0c;这些后续工作一般都可以通过语法…

国产芯片方案/血氧仪方案SIC88336

血氧仪是用来测量脉率、血氧浓度以及灌注指数的仪器设备&#xff0c;血氧浓度是临床医疗上重要的基础数据之一。如果有条件&#xff0c;人们应该时刻监测自己的血氧饱和度&#xff0c;对自己的健康更加有利。下面是详细知识说明。 一、血氧仪方案开发原理 该方案一种检测方式是…

SOFTS: Efficient Multivariate Time Series Forecasting with Series-Core Fusion

SOFTS: Efficient Multivariate Time Series Forecasting with Series-Core Fusion 文章目录 SOFTS: Efficient Multivariate Time Series Forecasting with Series-Core Fusion1. 论文背景1.1 通道独立-通道依赖的区别1.2 论文贡献 2. 模型架构2.1 SOFTS的主要架构2.2 STAR 模…