CNN代码详细注释

import torch 
from torch import nn#定义张量x,它的尺寸是5x1x28x28
#表示了5个单通道28x28大小的数据
x=torch.zeros([5,1,28,28])#定义一个输入通道是1,输出通道是6,卷积核大小是5x5的卷积层
conv=nn.Conv2d(in_channels=1,out_channels=6,kernel_size=5)#将x,输入至conv,计算出结果
c=conv(x)
#经过conv计算,得到5x6x24x24大小的输出张量,经过卷积层的处理后得到6x24x24大小的特征图print(c.shape)#程序输出:torch.Size([5,6,24,24])#继续输入至池化层,计算后会得到6x12x12大小的特征图
pool=nn.MaxPool2d(2)#定义最大池化层
s=pool(c) 将卷积层计算得到的整整图c,输入至pool#接下来继续到第2个卷积层,计算出16个8x8的输出特征图
#再输入到第2个池化层,计算得到16个4x4大小的特征图
#池化层输出后,将特征图进行展平:16个4x4 -> 1x256的向量  
#展平flatten:将每个图片中的每个像素放成一排,就是256维度的一维向量
#后面是全连接层 最后3个全连接层的大小为,256×120、120×84、84×10。
#经过这三个全连接层后:会计算出1×120、1×84、1×10的向量。1×10的向量,就对应了最终的10个分类结果。

LeNet5网络实现:

import torch
from torch.nn import Module
from torch import nnclass LeNet5(Module):def _init_(self):#说明了这个网络中有什么,定义网络结构super(LeNet5, self)._init_()#第1个卷积块self.convl = nn.Sequential(nn.Conv2d(1,6,5),nn.ReLU(),nn.MaxPool2d(2))#第2个卷积块self.conv2= nn.Sequential(nn.Conv2d(6, 16, 5),nn.ReLU(),nn.MaxPool2d(2))#全连接层1self.fcl = nn.Sequential(nn.Linear(256,120),#线性层nn.ReLU())#全连接层2self.fc2 = nn.Sequential(nn.Linear(120,84),nn.ReLU())#全连接层3self.fc3= nn.Linear(84,10) def forward(self,x):#输入张量x 进入到神经网络后,它尺寸会如何变化。#说明了,这个网络“如何算”!#最初输入的x是nx1x28x28大小的,其中n是数据数量x = self.convl(x)# [n, 6, 12,12]x = self.conv2(x)# [n, 16, 4, 4]#在x输入至全连接层前#需要使用view函数,将张量的维度从n×16x4x4展平为nx256x= x.view(-1,256)# [n,256]x = self.fcl(x)# [n,120]X = self.fc2(x)# [n,84]x = self.fc3(x)# [n,10]return x"""在函数中,输入张量x会按照顺序,进入conv1、conv2、fc1、fc2、fc3,进行计算。在旁边注释中,标记了张量x,经过每一层计算后,变化的尺寸。例如,最初输入的x是n×1×28×28大小的。这里n表示了数据的数量。因此,x经过conv1,就会计算得到n×6×12×12大小的张量。接着,x经过conv2,会计算出n×16×4×4的张量。备注:这里的conv1和conv2中,包含了池化层,所以特征图尺寸会减半。然后,在x输入至全连接层前,需要使用view函数:将张量的维度从n×16×4×4展平为n×256。接着再按照顺序,将x输入至全连接层fc1、fc2、fc3计算。最终函数返回一个n×10大小的结果。"""

训练:

for epoch in range(10):#外层循环,代表了整个训练数据集的遍历次数#内层循环使用train_loader,进行小批量的数据读取for batch_idx, (data, label) in enumerate(train_loader):#每次内层循环,都会进行一次梯度下降算法#梯度下降算法,包括了5个步骤:output=model(data)#1.计算神经网络的前向传播结果loss=criterion(output,label)#2.计算output和标签label之间的损失lossloss.backward() #3.使用backward计算梯度#每次内层循环,都会进行一次梯度下降算法。optimizer.step()#4.使用optimizer.step更新参数optimizer.zero_grad() # 5.将梯度清零#每迭代100个小批量,就打印一次模型的损失,观察训练的过程if batch_idx100 =0:print(f"Epoch (epoch + 1)/10 "f"| Batch (batch_idx)/(len(train_loader)}"f"i Loss: (loss.item():.4f)")
torch.save(model.state_dict(),'mnist_lenet5.pth')

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

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

相关文章

机器指标监控技术方案

文章目录 机器指标监控技术方案架构图组件简介Prometheus 简介核心特性适用场景 Grafana 简介核心特性适用场景 Alertmanager 简介核心特性适用场景 数据采集机器Node ExporterMySQL ExporterRedis ExporterES ExporterRocketMQ ExporterSpringcloud ExporterNacos 数据存储短期…

【Office-Excel】单元格输入数据后自动填充单位

1.自定义设置单元格格式 例如我想输入数字10,回车确认后自动显示10kg。 右击单元格或者快捷键(Ctrl1),选择设置单元格格式,自定义格式输入: 0"kg"格式仍是数字,但是显示是10kg&…

JavaScript的3D库有哪些?

JavaScript的3D库有哪些? 在3D开发领域,JavaScript提供了多种库和框架,使开发者能够在浏览器中创建丰富的3D体验。以下是一些流行的3D方面的JavaScript库: Three.js:这是最著名的用于创建3D图形的JavaScript库之一。它…

中央网信办部署开展“清朗·整治AI技术滥用”专项行动

为规范AI服务和应用,促进行业健康有序发展,保障公民合法权益,近日,中央网信办印发通知,在全国范围内部署开展为期3个月的“清朗整治AI技术滥用”专项行动。 中央网信办有关负责人表示,本次专项行动分两个阶…

论文阅读:2024 arxiv Jailbreaking Black Box Large Language Models in Twenty Queries

总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 Jailbreaking Black Box Large Language Models in Twenty Queries https://www.doubao.com/chat/4008882391220226 https://arxiv.org/pdf/2310.08419 速览 这篇论文是来…

零基础学指针2

零基础学指针---大端和小端 零基础学指针---什么是指针 零基础学指针---取值运算符*和地址运算符& 零基础学指针---结构体大小 零基础学指针5---数据类型转换 零基础学指针6---指针数组和数组指针 零基础学指针7---指针函数和函数指针 零基础学指针8---函数指针数组…

《Python实战进阶》 No46:CPython的GIL与多线程优化

Python实战进阶 No46:CPython的GIL与多线程优化 摘要 全局解释器锁(GIL)是CPython的核心机制,它保证了线程安全却限制了多核性能。本节通过concurrent.futures、C扩展优化和多进程架构,实战演示如何突破GIL限制&#…

Golang实现函数默认参数

golang原生不支持默认参数 在日常开发中,我们有时候需要使用默认设置,但有时候需要提供自定义设置 结构体/类,在Java我们可以使用无参、有参构造函数来实现,在PHP中我们也可以实现(如 public function xxx($isCName false, $sec…

Chrome 136 H265 WebRTC 支持 正式版本已包含

时间过的真快,去年8月份写过一篇文章介绍如何加参数方式启动Chrome H265 硬件解码器, 现在的136版本已经包含在内,至此WebRTC已经完整包含了H264和H265解码器,这个事情应该从2015年开始,Google强推VP9 AV1&#xff0c…

12.SpringDoc OpenAPI 功能介绍(用于生成API接口文档)

12.SpringDoc OpenAPI 功能介绍(用于生成API接口文档) SpringDoc OpenAPI 是一个基于 OpenAPI 3.0/3.1 规范的工具,用于为 Spring Boot 应用生成 API 文档。它是 springfox(Swagger 2.x)的现代替代方案,完全支持 Spring Boot 3.x…

CentOS Linux 环境二进制方式安装 MySQL 5.7.32

文章目录 安装依赖包新建用户解压初始化配置文件启动服务登录MySQL修改密码停止数据库 安装依赖包 yum -y install libaio perl perl-devel libncurses* autoconf numactl新建用户 useradd mysql解压 tar xf mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.32-l…

Webug4.0通关笔记06- 第8关CSV注入

目录 CSV注入漏洞 1.CSV漏洞简介 2.漏洞原理 (1)公式执行 (2)DDE机制 (3)OS命令执行 3.漏洞防御 第08关 CSV注入 1.打开靶场 2.修改源码 3.注入命令 4.导出excel表 5.打开excel表 CSV注入漏洞…

Windows和 macOS 上安装 `nvm` 和 Node.js 16.16.0 的详细教程。

Windows和 macOS 上安装 nvm 和 Node.js 16.16.0 的详细教程。 --- ### 1. 安装 nvm(Node Version Manager) nvm 是一个 Node.js 版本管理工具,可以轻松安装和切换不同版本的 Node.js。 #### Windows 安装 nvm 1. **下载 nvm 安装包**&#x…

[特殊字符] 蓝桥杯省赛全解析:含金量、获奖难度、参赛意义与发展价值全面剖析

蓝桥杯省赛刚刚落幕,不论你是刚参加完比赛的同学,还是还在观望是否值得投入时间去准备蓝桥杯的学生,相信你都关心: 蓝桥杯到底值不值得参加? 获奖难不难?含金量如何? 和其它算法竞赛相比有什么…

ASP.NET MVC后端控制器用模型 接收前端ajax数据为空

1、前端js代码 如下: const formData {DeptName: D001,Phone: 12345678900 };$.ajax({url: "/Phone/SavePhone1",type: "POST",contentType: "application/json",data: JSON.stringify(formData), //必须要JSON.stringifysuccess:…

拥抱 Kotlin Flow

1. 引言 Kotlin Flow 是 Kotlin 协程生态中处理异步数据流的核心工具,它提供了一种声明式、轻量级且与协程深度集成的响应式编程模型。与传统的 RxJava 相比,Flow 更简洁、更易于维护,尤其在 Android 开发中已成为主流选择。本文将从基础概念…

精益数据分析(34/126):深挖电商运营关键要点与指标

精益数据分析(34/126):深挖电商运营关键要点与指标 在创业和数据分析的学习之旅中,我们都在不断探寻如何让业务更上一层楼。今天,我依旧带着和大家共同进步的想法,深入解读《精益数据分析》中电商运营的关…

Learning vtkjs之ImageCropFilter

过滤器 图片数据体积裁剪 介绍 vtkImageCropFilter可以裁剪vtkImageData。这只适用于IJK对齐的平面。 请注意,由于CPU限制的裁剪,这在大型数据集上会很慢。 效果 核心代码 需要实现这个代码主要逻辑 1、设定的crop的包围盒 其实主要是IMax IMin JM…

深入理解 C++11 delete 关键字:禁用函数的艺术

一、什么是 delete 关键字 C11 引入的 delete 关键字是一种​​显式禁用函数​​的语法机制。它允许开发者主动阻止特定函数的使用,比传统的私有化声明更直观、更安全,且能在编译期捕获更多潜在错误。 二、为什么需要 delete? 1. 传统方式…

深度剖析!GPT-image-1 API 开放对 AI 绘画技术生态的冲击!

4月24日凌晨,OpenAI正式发布了全新的图像生成模型“gpt-image-1”,并通过API向全球开发者开放使用,这意味着其GPT-4o的图像生成能力正式向开发者开放! 在这之前,GPT-4o的图像生成功能于今年3月25日由 OpenAI 创始人兼 …