深度学习在训练时更新和保存最佳训练结果的方法(字典方法,本地保存方法,模型深拷贝方法)

1.用参数字典 model.state_dict()更新最优参数

best_state_dict = model.state_dict()  # 训练前
best_state_dict = model.state_dict()  # 训练时更新最优state_dict

完整代码:

 # 初始化一个变量来保存最优的state_dictbest_state_dict = model.state_dict()for epoch in range(epochs):model.train()# 训练集上训练模型权重for data, targets in tqdm.tqdm(train_dataloader):# 把数据加载到GPU上data = data.to(devices[0])targets = targets.to(devices[0])# 前向传播preds = model(data)loss = criterion(preds, targets)# 反向传播optimizer.zero_grad()loss.backward()optimizer.step()# 测试集上评估模型性能model.eval()num_correct = 0num_samples = 0with torch.no_grad():for x, y in tqdm.tqdm(test_dataloader):x = x.to(devices[0])y = y.to(devices[0])preds = model(x)predictions = preds.max(1).indices  # 返回每一行的最大值和该最大值在该行的列索引num_correct += (predictions == y).sum()num_samples += predictions.size(0)acc = (num_correct / num_samples).item()if acc > best_acc:best_acc = accbest_epoch = epoch+1# 保存模型最优准确率的参数best_state_dict = model.state_dict()  # 更新最优state_dictmodel.train()# 训练结束保存torch.save(best_state_dict, f"weights/{model_name}_{epochs}_{best_acc}.pth")

2.训练过程中保存最优参数

if acc > best_acc:best_acc = accbest_epoch = epoch+1torch.save(best_state_dict, f"weights/{model_name}_{epochs}_{best_acc}.pth")

3.对模型深拷贝方法保存最优模型

深拷贝方法介绍

copy模块可以用来创建一个对象的深拷贝。这意味着复制后的模型和原始模型是完全独立的,包括它们的参数。

import torch  
import copy  
import torch.nn as nn  # 假设我们有一个模型实例  
original_model = nn.Sequential(  nn.Linear(10, 5),  nn.ReLU(),  nn.Linear(5, 2)  
)  # 复制模型  
model_copy = copy.deepcopy(original_model)

深拷贝方法保存最优模型

best_model = copy.deepcopy(model.state_dict())  # 训练前
best_model = copy.deepcopy(model.state_dict())  # 训练时更新最优state_dict

代码案例:

   def fit_zsl(self):best_acc = 0mean_loss = 0last_loss_epoch = 1e8# 定义best_modelbest_model = copy.deepcopy(self.model.state_dict())for epoch in range(self.nepoch):for i in range(0, self.ntrain, self.batch_size):self.model.zero_grad()batch_input, batch_label = self.next_batch(self.batch_size)self.input.copy_(batch_input)self.label.copy_(batch_label)inputv = Variable(self.input)labelv = Variable(self.label)output = self.model(inputv)loss = self.criterion(output, labelv)mean_loss += loss.item()loss.backward()self.optimizer.step()acc = self.val(self.test_unseen_feature,self.test_unseen_label,self.unseenclasses,)if acc > best_acc:best_acc = acc# 更新best_modelbest_model = copy.deepcopy(self.model.state_dict())#训练完毕本地保存torch.save(best_model.state_dict(), f"weights/{self.nepoch}_{best_acc}.pth")return best_acc, best_model

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

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

相关文章

光纤和光模块的那点事儿

你们好,我的网工朋友。 应该不少朋友在工作中会遇到光纤传输布线的活吧,不得不说,会遇上的问题还挺多,比如说…… 光纤收发器怎么接上不亮? 光纤收发器和交换机插光模块能不能搭配使用? 带光口的球机可…

第1章 理解知识图谱:知识图谱现状、知识图谱应用场景(二)

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

执行栈和执行上下文

前端面试大全JavaScript执行栈和执行上下文 🌟经典真题 🌟执行上下文 🌟栈数据结构 🌟执行上下文生命周期 🌟真题解答 🌟总结 🌟经典真题 谈谈你对 JavaScript 执行上下文栈理解 &#…

强制进行innodb恢复(数据库崩溃恢复)

经常接触数据库的难免遇到数据库崩溃的问题,另外发现使用windows的,遇到的几率会高点。 问题描述,mysql/mariadb突然就不能访问了,然后也无法启动,查看数据库日志,报些莫名奇妙的错误。 [ERROR] mysqld g…

如何将unity项目托管到github(快速便捷)

如何将unity项目托管到github(快速便捷) 文章目录 如何将unity项目托管到github(快速便捷)前置准备Gitgithubgit-lfs 具体操作1.配置.gitignore文件2.配置.gitattributes3.使用git 前置准备 Git github git-lfs 这些内容省略&…

你的AI生成物侵权了吗?

你的AI生成物侵权了吗? 本文目录: 一、前置背景 1.1、什么是版权 1.2、什么是作品 1.3、什么是创作 1.4、什么是肖像权 1.5、什么是名誉 二、AI生成的作品是否具备版权?如果具备,版权应该属于谁? 三、AI 学习时…

ruby安装(vscode、rubymine)

https://rubyinstaller.org/downloads/ 下载exe安装即可 会弹出 输入3 安装成功 vscode插件市场安装ruby插件 新建一个目录,打开terminal bundle init //进行初始化(如果执行不了,应该是环境变量没生效,重启vscode&#…

WT2605C语音芯片的无缝循环功能在产品设计中的应用介绍

随着科技的飞速发展,语音芯片已经成为许多产品不可或缺的一部分。而在这些功能中,无缝循环播放功能尤其引人注目,它能够为各种产品带来独特且富有吸引力的用户体验。本文将探讨语音芯片的无缝循环功能可以应用于哪些产品设计上。 1、智能家居…

菜鸟学习日记(python)——数据类型转换

在python中,数据类型的转换有两种方式:隐式类型转换和显示类型转换。 隐式类型转换一般在进行计算时,自动完成转换,显示类型转换一般要用到类型函数来完成转换,它的格式为:数据类型(要转换的数…

使用Docker和Selenium构建自动化测试环境

随着软件开发的日益复杂和迭代速度的加快,自动化测试被越来越广泛地应用于软件开发流程中。它能够提高测试效率、减少测试成本,并保证软件质量的稳定性。在构建自动化测试环境方面,Docker 和 Selenium 是两个非常有用的工具。下面将介绍如何使…

springboot流浪动物救助管理系统源码丨文档+调试+答疑

🍅 简介:500精品计算机源码学习 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 文末获取源码 目录 一、以下学习内容欢迎领取: 二、文档资料截图: 三想了解更多,请收藏、评论、留言:…

项目实战-编写ssm整合配置文件

1、父工程pom.xml <properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring.version>…

【每日一题】1038. 从二叉搜索树到更大和树-2023.12.4

题目&#xff1a; 1038. 从二叉搜索树到更大和树 给定一个二叉搜索树 root (BST)&#xff0c;请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。 提醒一下&#xff0c; 二叉搜索树 满足下列约束条件&#xff1a; 节点的左子树仅包含键 小于 节点键的节点。…

[SaaS] 天猫商品海报生成 灵感艺术家

AIGC在天猫商品海报生成上的探索没有灵感GPT&#xff0c;画不出来SD。https://mp.weixin.qq.com/s/_CkkqoWmHDZ0YqAhmAhL1A天猫在海报图生成上的探索。 技术路线&#xff1a; 初看不觉得什么&#xff0c;细看还真有点不一样&#xff0c;通常我们用canny controlnet是为了控制商…

人工智能发展史

人工智能&#xff08;AI&#xff09;的发展史是一段跨越数十年的旅程&#xff0c;涵盖了从早期理论探索到现代技术革新的广泛内容。人工智能的发展历程展示了从最初的概念探索到现代技术突破的演变。尽管经历了多次起伏&#xff0c;但AI领域持续进步&#xff0c;不断拓展其应用…

【性能测试】资深老鸟总结,常见并发问题汇总(二)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、极限值并发的问…

Unity 性能优化的手段

对象池 使用对象池&#xff1a;频繁地创建和销毁对象会导致性能下降和内存碎片化。对象池可以预先创建一些对象&#xff0c;然后在需要时从池中取出&#xff0c;不再使用时再放回池中。 减少Draw Calls Draw Call是指CPU向GPU发送绘制命令的次数。减少Draw Call可以通过批处理…

【C++】赋值运算符重载

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

使用 python ffmpeg 批量检查 音频文件 是否损坏或不完整

自用工具&#xff0c;检查下载的音乐是否有损坏 或 下载不完整 使用方法&#xff0c;把 in_dir r’D:\158首无损珍藏版’ 改成你自己的音乐文件夹路径 如果发现文件有损坏&#xff0c;则会在命令行打印错误文件的路径 注意&#xff0c;要求 ffmpeg 命令可以直接在命令行调用…

GPIO的使用--存储系统与位带操作理解

目录 存储系统与位带操作 1、对GPIO的操作函数 2、计算机对地址的管理 3、板子地址 4、什么是位带操作 5、位带地址好处 存储系统与位带操作 1、对GPIO的操作函数 //方案一 GPIO_WriteBit(GPIOF,GPIO_Pin_9,0);//方案二 GPIO_Write(GPIOF,0x0000);//方案三 GPIOF->O…