Pytorch深度学习完整CPU图像分类代码

1.准备数据集

train_data = torchvision.datasets.CIFAR10("../data",train=True,transform=torchvision.transforms.ToTensor(),download=True)
test_data = torchvision.datasets.CIFAR10("../data",train=False,transform=torchvision.transforms.ToTensor(),download=True)

2.使用DataLoader加载数据

#利用DataLoader 来加载数据集
train_dataloader = DataLoader(train_data_size,batch_size=64)
test_dataloader = DataLoader(test_data_size,batch_size=64)

3.创建模型(根据需要调整)

class My_Module(nn.Module):def __init__(self):super(My_Module,self).__init__()          XXXdef forward(self,x):return x

4.加载模型

#创建网络模型
My_Module = My_Module()#损失函数
loss_fn = nn.CrossEntropyLoss()#优化器
learning_rate = 0.0001
optimizer = torch.optim.SGD(My_Module.patameters(),lr=learning_rate)#设置训练网络的参数
total_train_step = 0    #记录训练的次数
total_test_step = 0     #记录测试的次数
epoch = 100     #训练的轮数#添加tensorboard
writer = SummaryWriter("../logs_train")

5.训练

for i in range(epoch):print("-----------第 {} 训练开始-----------".format(i+1))#训练步骤开始My_Module.train()for data in train_dataloader:imgs,labels = dataoutputs = My_Module(imgs)loss = loss_fn(outputs,labels)#优化器优化模型optimizer.zero_grad()loss.backward()optimizer.step()total_train_step = total_train_step + 1if total_train_step % 100 == 0:print("训练次数:{},loss:{}".format(total_train_step,loss.item()))writer.add_scalar("train_loss", loss.item(),total_train_step)#测试步骤开始My_Module.eval()total_test_loss = 0total_arruracy = 0with torch.no_grad():for data in test_dataloader:test_imgs, test_labels = dataoutputs = My_Module(test_imgs)loss = loss_fn(outputs,test_labels)total_test_loss = total_test_loss +loss.item()accuracy = (outputs.argmax(1) == test_labels).sum()total_arruracy = total_arruracy + accuracyprint("整体测试集上的loss:{}".format(total_test_loss))print("整体测试集上的正确率:{}".format(total_arruracy/test_data_size))writer.add_scalar("test_loss", total_test_loss,total_test_step)writer.add_scalar("test_accuracy", total_arruracy/test_data_size,total_test_step)torch.save(My_Module,"My_Module_{}.pth".format(i))print("模型已保存")writer.close()

6.查看loss图

1.在项目终端输入:tensorboard --logdir=logs
2.在浏览器中打开就可以看到loss图像了
说明:tensorboard --logdir=logs中的“logs”指的是SummaryWriter("logs")中的“logs”。这两个保持一致就可以了。

完整代码

# -*- coding: utf-8 -*-
"""
Created on Fri Apr 12 20:54:46 2024@author: ZW
"""import torchvision
from torch.utils.tensorboard import SummaryWriter
from torch import nn
from torch.utils.data import DataLoader
import torchtrain_data = torchvision.datasets.CIFAR10("../data",train=True,transform=torchvision.transforms.ToTensor(),download=True)
test_data = torchvision.datasets.CIFAR10("../data",train=False,transform=torchvision.transforms.ToTensor(),download=True)#length长度
train_data_size = len(train_data)
test_data_size = len(test_data)
print("训练数据集的长度为:{}".format(train_data_size))
print("测试数据集的长度为:{}".format(test_data_size))#利用DataLoader 来加载数据集
train_dataloader = DataLoader(train_data_size,batch_size=64)
test_dataloader = DataLoader(test_data_size,batch_size=64)class My_Module(nn.Module):def __init__(self):super(My_Module,self).__init__()          def forward(self,x):return x#创建网络模型
My_Module = My_Module()#损失函数
loss_fn = nn.CrossEntropyLoss()#优化器
learning_rate = 0.0001
optimizer = torch.optim.SGD(My_Module.patameters(),lr=learning_rate)#设置训练网络的参数
total_train_step = 0    #记录训练的次数
total_test_step = 0     #记录测试的次数
epoch = 100     #训练的轮数#添加tensorboard
writer = SummaryWriter("../logs_train")for i in range(epoch):print("-----------第 {} 训练开始-----------".format(i+1))#训练步骤开始My_Module.train()for data in train_dataloader:imgs,labels = dataoutputs = My_Module(imgs)loss = loss_fn(outputs,labels)#优化器优化模型optimizer.zero_grad()loss.backward()optimizer.step()total_train_step = total_train_step + 1if total_train_step % 100 == 0:print("训练次数:{},loss:{}".format(total_train_step,loss.item()))writer.add_scalar("train_loss", loss.item(),total_train_step)#测试步骤开始My_Module.eval()total_test_loss = 0total_arruracy = 0with torch.no_grad():for data in test_dataloader:test_imgs, test_labels = dataoutputs = My_Module(test_imgs)loss = loss_fn(outputs,test_labels)total_test_loss = total_test_loss +loss.item()accuracy = (outputs.argmax(1) == test_labels).sum()total_arruracy = total_arruracy + accuracyprint("整体测试集上的loss:{}".format(total_test_loss))print("整体测试集上的正确率:{}".format(total_arruracy/test_data_size))writer.add_scalar("test_loss", total_test_loss,total_test_step)writer.add_scalar("test_accuracy", total_arruracy/test_data_size,total_test_step)torch.save(My_Module,"My_Module_{}.pth".format(i))print("模型已保存")writer.close()

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

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

相关文章

数据可视化插件echarts【前端】

数据可视化插件echarts【前端】 前言版权开源推荐数据可视化插件echarts一、如何使用1.1 下载1.2 找到js文件1.3 入门使用1.4 我的使用 二、前后端交互:入门demo2.1 前端htmljs 2.2 后端entitycontrollerservicemapper 三、前后端交互:动态数据3.1 前端j…

【08】c++运算符重载

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、加号运算符二、左移运算符三.递增或者递减运算符总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:C运算符重载…

JVM性能调优——OOM分类及解决方案

文章目录 1、概述2、OOM案例1:堆内存溢出3、OOM案例2:元空间溢出4、OOM案例3:GC overhead limit exceeded5、OOM案例4:线程溢出6、小结 在工作中会经常遇到内存溢出(Out Of Memory,OOM)异常的情况,每当遇到OOM,总是让人…

关于使用druid数据源连接Oracle导致的SQLRecoverableException(socket read timeout,关闭的连接等)

背景 数据源初始化后,获取Oracle的连接进行查询操作,相隔 半个小时 左右,再次对同一数据库进行查询操作。 问题 第二次查询的时候,就会出现如下一些异常情况 2019-06-05 14:17:58.247 [CorePoolHandler-thread-6] ERROR [LOGID:] com.alibaba.druid.pool.DruidDataSource -…

matlab2024a软件下载

matlab2024a软件下载 MATLAB R2024a版本终于来了,通过上一个版本连续更新至Update7就预感这个版本将带来更多的新功能及增强。MATLAB更新包括编辑器拼写检查、面板导航、局部函数、Python接口互操作性、REST函数服务、安全信息存储以及ode对象求解器。Simulink更新…

camera驱动学习总结记录

https://www.yuque.com/u2132176/yfiyal/ch1zsrgzevcwf1rw 视频教程里面对应的gc2053c驱动源码注解: gc2053.c(60 KB) 对应的驱动文档: Rockchip_Driver_Guide_VI_CN_v1.1.1(2).pdf(2.3 MB) 视频里面对应的mipi协议文档汇总: MIPI标准文档大…

lv_micropython to download and building

想要在ESP32-C3使用Micropython开发GUI,所以需要编译lv_micropython,当前github上的版本是9.1.0。 一、开发环境 因为编译lv_micropython需要在linux系统下,但是我的电脑是windows系统,所以我在windows系统上安装了VMware虚拟机&…

如何用composer来安装和配置LAMP环境?

LAMP环境是一个开发和运行Web应用程序的常见环境,它由Linux、Apache、MySQL和PHP组成。Composer是一个用于管理PHP依赖关系的工具,可以方便地安装和配置LAMP环境中的各种软件包。下面是使用Composer安装和配置LAMP环境的步骤: 安装Composer&a…

Django框架设计原理

相信大多数的Web开发者对于MVC(Model、View、Controller)设计模式都不陌生,该设计模式已经成为Web框架中一种事实上的标准了,Django框架自然也是一个遵循MVC设计模式的框架。不过从严格意义上讲,Django框架采用了一种更…

C语言什么是指针? 什么是指针变量?

一、问题 指针是 C 语⾔中的⼀个重要概念,也是 C 语⾔中的⼀个重要特⾊。它的身影在整个 C 语⾔体系中都会出现,⽽且其概念也⼗分复杂,需要多加注意和思考。 二、解答 为了更好地弄清指针的概念,这⾥不得不先提到地址以及数据在内…

MySQL知识整理

MySQL知识整理 基础第一讲:基础架构:一条SQL查询语句是如何执行的?架构尽量减少长连接的原因和方案为什么尽量不要依赖查询缓存 索引第四讲:深入浅出索引(上)第五讲:深入浅出索引(下…

C#面:介绍 ArrayList 与 Array 的区别

ArrayList 和 Array 是 C# 中两种不同的数据结构。 Array(数组) 是一种固定长度的数据结构,它可以存储相同类型的元素。在创建数组时,需要指定数组的长度,并且不能改变长度。数组的访问速度较快,因为它们…

【前端面试3+1】14 路由跳转的方式、如何取消已经发送的ajax请求、如何按顺序发起三个ajax请求并按顺序返回、【两个数组的并集】

一、路由跳转的几种方式 1、页面跳转 使用超链接 <a> 标签&#xff1a;通过在页面中定义超链接&#xff0c;用户点击超链接后会跳转到指定的URL页面。使用重定向&#xff1a;服务器端可以通过设置HTTP响应头中的Location字段&#xff0c;将用户重定向到指定的URL页面。使…

Web3 的社会影响:数字社会的新时代

随着科技的不断进步和创新&#xff0c;人类社会正逐步进入数字化时代的新阶段。Web3 技术作为数字社会的重要组成部分&#xff0c;正在以前所未有的方式重塑着我们的社会生活和交往方式。本文将探讨 Web3 技术对社会的影响&#xff0c;以及它所带来的数字社会的新时代。 1. Web…

JVM基础第一篇

内存结构 程序计数器 1.定义 在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;每个线程都有一个独立的程序计数器&#xff0c;它是线程私有的&#xff0c;不会被线程切换所影响。 2.作用 记住下一条jvm指令的执行地址 3.特点 是线程私有的不会存在内存溢出 虚拟机…

数据结构——单链表(C语言版)

文章目录 一、链表的概念及结构二、单链表的实现SList.h链表的打印申请新的结点链表的尾插链表的头插链表的尾删链表的头删链表的查找在指定位置之前插入数据在指定位置之后插入数据删除pos结点删除pos之后的结点销毁链表 三、完整源代码SList.hSList.ctest.c 一、链表的概念及…

设计模式示例

单例模式示例 单例模式是一种常用的软件设计模式&#xff0c;其目的是确保一个类只有一个实例&#xff0c;并提供一个全局访问点。以下是一个简单的单例模式示例&#xff1a; java public class Singleton {// 私有静态实例&#xff0c;防止被引用&#xff0c;此处赋值为nul…

【算法分析与设计】全排列

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;算法分析与设计 ⛺️稳中求进&#xff0c;晒太阳 题目 给定一个不含重复数字的整数数组 nums &#xff0c;返回其 所有可能的全排列 。可以 按任意顺序 返回答案。 示例 示例 1&#xff1…

Transformer 结构浅析

Transformer 结构浅析 文章目录 Transformer 结构浅析Transformer 网络结构编码器位置编码多头注意力层Add&NormFeed Forward 解码器带掩码的多头注意力层多头注意力层 预测 Transformer 网络结构 Transformer模型的网络结构如图&#xff0c;且transformer结构主要分为两部…

二叉搜索树--搜索二维矩阵 II

题目描述 编写一个高效的算法来搜索 m * n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,…