小白零基础如何搭建CNN
1.面向对象编程
1.1类(Class)和对象(Object)

class Animal:"""定义一个动物类Animal,包含基本属性和行为。"""def __init__(self, name, species, age=0):"""__init__是类的初始化方法,用于创建类的对象时初始化书写初始化动物的属性。:param name: 动物的名字(字符串):param species: 动物的种类(字符串):param age: 动物的年龄(整数,默认为0)"""self.name = name # 动物的名字self.species = species # 动物的种类self.age = age # 动物的年龄def eat(self, food):"""对象方法描述动物进食的行为。:param food: 动物吃的食物(字符串)"""print(f"{self.name} 正在吃 {food}。")def sleep(self, hours):"""描述动物睡觉的行为。:param hours: 睡觉的小时数(整数)"""print(f"{self.name} 睡觉了 {hours} 小时。")def make_sound(self):"""描述动物发出声音的行为。"""print(f"{self.name} 发出了声音。")def display_info(self):"""打印动物的详细信息。"""print(f"名字: {self.name}")print(f"种类: {self.species}")print(f"年龄: {self.age} 岁")# 示例代码
if __name__ == "__main__":# 创建一个动物实例my_animal = Animal(name="小白", species="狗", age=3)# 调用方法my_animal.display_info() # 打印动物信息my_animal.eat("骨头") # 动物进食my_animal.sleep(8) # 动物睡觉my_animal.make_sound() # 动物发出声音
注:self 是一个特殊的参数,用于表示类的实例本身。它是一个指向当前对象的引用,允许你访问和修改对象的属性和方法。简单来说,self 就是“当前对象”的代名词。
1.卷积层
在PyTorch中针对卷积操作的对象和使用的场景不同,如有1维卷积、2维卷积、
3维卷积与转置卷积(可以简单理解为卷积操作的逆操作),但它们的使用方法比较相似,都可以从torch.nn模块中调用,需要调用的类如表2-4所示。
torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros')
参数说明
in_channels:输入数据的通道数。例如,对于 RGB 图像,in_channels=3。
out_channels:输出数据的通道数,即卷积核的数量。
kernel_size:卷积核的大小,可以是一个整数(表示正方形卷积核),也可以是一个元组(表示矩形卷积核)。例如,kernel_size=3 或 kernel_size=(3, 5)。
stride:卷积核移动的步长,默认为 1。可以是一个整数(表示水平和垂直方向的步长相同),也可以是一个元组(分别表示水平和垂直方向的步长)。
padding:输入数据的填充大小,默认为 0。可以是一个整数(表示水平和垂直方向的填充相同),也可以是一个元组(分别表示水平和垂直方向的填充)。填充的作用是增加输入数据的边界,使卷积操作后输出的尺寸更大或保持不变。
dilation:卷积核的扩张率,默认为 1。可以是一个整数(表示水平和垂直方向的扩张率相同),也可以是一个元组(分别表示水平和垂直方向的扩张率)。扩张率用于增加卷积核的感受野。
groups:分组卷积的组数,默认为 1。当 groups > 1 时,输入通道和输出通道会被分成若干组,每组分别进行卷积操作。
bias:是否为卷积层添加偏置项,默认为 True。
padding_mode:填充模式,默认为 ‘zeros’,表示用零填充。其他可选值包括 ‘reflect’ 和 ‘replicate’。

input:import torch
import torch.nn as nn# 创建一个 Conv2d 实例
conv_layer = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1)# 创建一个输入张量(模拟一个 3 通道的 28x28 图像)
input_tensor = torch.randn(1, 3, 28, 28) # (batch_size, channels, height, width)# 使用卷积层对输入张量进行卷积操作
output_tensor = conv_layer(input_tensor)print("输入张量的形状:", input_tensor.shape)
print("输出张量的形状:", output_tensor.shape)
output:输入张量的形状: torch.Size([1, 3, 28, 28])
1.1 填充层
填充(Padding) 是一种重要的操作,通常用于卷积层(Conv2d)和池化层(MaxPool2d、AvgPool2d 等)。填充的主要目的是在输入数据的边界上添加额外的值(通常是零),以控制卷积或池化操作后的输出尺寸在前面介绍的卷积操作中,可以发现经过卷积后,输出特征映射的尺寸会变小,卷积后的结果中损失了部分值,输入图像的边缘被“修剪”掉了,这是因为边缘上的像素永远不会位于卷积核中心,而卷积核也不能扩展到边缘区域以外。如果还希望输入和输出的大小应保持一致,需要在进行卷积操作前,对原矩阵进行边界填充(padding),也就是在矩阵的边界上填充一些值,以增加矩阵的大小。虽然卷积操作可以使用填充参数0进行边缘填充,但是在PyTorch中还提供了其他的填充函数,可以完成更复杂的填充任务,例如反射填充、复制填充等。针对不同的填充方式,下面使用2维矩阵的2D填充为例,展示了不同方法的填充效果,如图2-3所示


1.2 激活函数
。PyTorch提供了十几种激活函数层所对应的类,但常用的激活函数通常为S型
(Sigmoid)激活函数、双曲正切(Tanh)激活函数、线性修正单元(ReLU)激活函数等。常激活函数类和功能如表2-7所示。


1.3 归一化函数
归一化函数可以放置在卷积层和激活函数之间,也可以在激活函数之后。具体位置取决于所使用的归一化方法和网络架构的设计.常用的归一化函数层分别为批量归一化、组归一化、层归一化以及样本归一化。在图2-5中展示了各种归一化函数层的作用维度示意图,其中N表示数据中的batch(批量)维度,C表示channel(通道)维度,阴影部分表示要归一化为相同均值和方差的内容。



2.池化层
池化会选取一定大小区域,将该区域内的像素值使用一个代表元素表示。如果使用平均值代替,称为平均值池化,如果使用最大值代替则称为最大值池化。这两种池化方式的示意图如图2-2所示
在PyTorch中, 提 供 了 多 种 池 化 的 类, 分 别 是 最 大 值 池 化(MaxPool)、 最大 值 池 化 的 逆 过 程(MaxUnPool)、 平 均 值 池 化(AvgPool)与 自 适 应 池 化(AdaptiveMaxPool、AdaptiveAvgPool)等。并且均提供了1维、2维和3维的池化操作。具体的池化类和功能如表2-5所示。

input:#定义最大池化层
max_pool=nn.MaxPool2d(kernel_size=2,stride=2,padding=0)
#创建一个输入张量(模拟一个3通道的8*8图像)
input_tensor=torch.randn(1,3,8,8)#(batch_size,channels,height,width)
output_tensor=max_pool(input_tensor)
print("输入张量的形状:", input_tensor.shape)
print("输入张量的形状:", output_tensor.shape)
output:输入张量的形状: torch.Size([1, 3, 8, 8])
输入张量的形状: torch.Size([1, 3, 4, 4])

3.全连接层
它的作用是把输入的特征进行“混合”和“转换”,生成新的特征,最终用于分类或回归任务。
全连接层通常由两部分组成:
a.线性变换(nn.Linear):把输入特征转换成输出特征。
b.激活函数:在输出上应用非线性激活函数,比如 ReLU、Sigmoid 等,增加模型的非线性能力
torch.nn.Linear(in_features, out_features, bias=True)

input:#创建一个全连接层
fc_layer=nn.Linear(in_features=3,out_features=2,bias=True)
#创建一个输入张量(模拟一个人的身高、体重、年龄)
input_tensor=torch.tensor([[175.0,70.0,25.0]])
#应用全连接层
output_tensor=fc_layer(input_tensor)
import torch.nn.functional as F
#应用激活函数
activated_output=F.relu(output_tensor)
print("输入张量的形状:",input_tensor.shape)
print("输入张量的形状:",output_tensor.shape)
print("输入张量的形状:",activated_output)
output:输入张量的形状: torch.Size([1, 3])
输入张量的形状: torch.Size([1, 2])
输入张量的形状: tensor([[87.3310, 44.2483]], grad_fn=<ReluBackward0>)
相关文章:
小白零基础如何搭建CNN
1.面向对象编程 1.1类(Class)和对象(Object) class Animal:"""定义一个动物类Animal,包含基本属性和行为。"""def __init__(self, name, species, age0):"""__init__…...
在vivado中对数据进行延时,时序对齐问题上的理清
在verilog的ISP处理流程中,在完成第一个模块的过程中,我经常感到困惑,到底是延时了多少个时钟?今日对这几个进行分类理解。 目录 1.输入信号激励源描述 1.1将数据延时[9]个clk 1.2将vtdc与hzdc延时[9]个clk(等价于单bit的数据…...
《只狼》运行时提示“mfc140u.dll文件缺失”是什么原因?要怎么解决?
《只狼》运行时提示“mfc140u.dll文件缺失”是什么原因?要怎么解决? 宝子们,是不是在玩《只狼》的时候,突然弹出一个提示:“找不到mfc140u.dll文件”?这可真是让人着急上火!别慌,今…...
vue学习笔记7
打包发布 目标:明确打包的作用 说明:vue脚手架只是开发过程中,协助开发的工具,当真正开发完了 > 脚手架不参与上线 打包的作用: 将多个文件压缩合并成一个文件,语法降级,less sass ts 语法…...
Unity 增量打包AssetBundle
背景 打包太慢了,想要没改动的资源不重新打包浪费时间。 来源 官方文章:https://forum.unity.com/threads/about-incremental-build-and-asset-bundle-hashes.1436032/ 官网AB介绍:https://learn.unity.com/tutorial/assets-resources-and…...
嵌入式八股文面试题(二)C语言算法
相关概念请查看文章:C语言概念。 1. 如何实现一个简单的内存池? 简单实现: #include <stdio.h> #include <stdlib.h>//内存块 typedef struct MemoryBlock {void *data; // 内存块起始地址struct MemoryBlock *next; // 下一个内…...
尚硅谷爬虫note005
一、编解码 1.get请求的quote方法 将汉字转为Unicode字符 # _*_ coding : utf-8 _*_ # Time : 2025/2/12 16:33 # Author : 20250206-里奥 # File : demo19_get请求的quote方法 # Project : PythonProject10-14# 景甜page # https://www.baidu.com/s?ieutf-8&f8&rsv…...
xml 和json互转工具
工具1 有个问题会导致springboot返回捕获的异常编程xml格式 import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import org.json.JSONObject; import org.json.XML; import org.w3c.dom.Document;import javax.xm…...
ElementUI 抽屉组件高度封装
在前端开发中,ElementUI 的el-drawer组件虽实用,但为满足复杂业务需求,如统一样式、特定交互和灵活使用,常需二次封装。下面将带你实现一个高度封装的 ElementUI 抽屉组件。 创建基础封装组件 创建MyDrawer.vue,引入e…...
深入解析:如何在C#和C/C++之间安全高效地通过P/Invoke传递多维数组
在工业控制、机器人编程和物联网等领域,我们经常需要让C#这样的托管语言与C/C编写的底层库进行交互。在这个过程中,遇到需要传递多维数组的场景时,许多开发者会意外遭遇System.Runtime.InteropServices.MarshalDirectiveException异常。本文将…...
轻量级在线ETL数据集成工具架构设计与技术实现深度剖析
在当今数字化时代,企业面临着海量异构数据的整合挑战。ETL(Extract, Transform, Load)工具作为数据集成的核心,负责将分散在不同数据源中的数据进行抽取、转换和加载,以构建统一的数据视图。本文将深入剖析一款基于诺依框架开发的在线ETL数据集成工具,重点阐述其架构设计…...
二、k8s项目的生命周期
项目的生命周期 创建-----------》发布-----------》更新--------》回滚----------》删除 kubectl create deployment nginx1 --imagenginx:1.22 --replicas3 基于deployment控制器创建pod 控制器的名称是nginx1 pod使用的镜像:nginx:1.22 --replicas3 pod的数量有多少 3个…...
GPT 系列模型发展史:从 GPT 到 ChatGPT 的演进与技术细节
从 GPT 到 ChatGPT,OpenAI 用短短几年时间,彻底改变了自然语言处理(NLP)的格局。让我们一起回顾这段激动人心的技术演进史!🚀 🔹 GPT(2018): 划时代的起点&a…...
C#语言的云计算
C#语言在云计算中的应用 引言 随着信息技术的飞速发展,云计算已经成为了现代计算架构的重要组成部分。传统的本地计算方式逐渐被云计算所取代,使得企业与开发者能够更高效地处理数据、部署应用程序以及进行资源管理。在众多编程语言中,C#以…...
金仓数据库-KingbaseES-学习-01-单机部署(非图形化安装)
目录 一、环境信息 二、介绍 三、下载地址 四、安装步骤 1、配置内核参数 (1)文件系统相关 (2)共享内存与信号量(IPC) (3)网络与端口配置 (4)关键场…...
海外服务器都有什么作用?
海外服务器具体就是指部署在中国大陆以外地区的服务器,企业选择租用海外服务器能够显著提高不同国家和地区用户的访问速度,当网站的服务器部署在目标用户所在地附近时,数据信息所传输的距离就会缩短,大大降低了网络访问的延迟度&a…...
git bash在github的库中上传或更新本地文件
一、将本地文件上传到 GitHub 仓库 1. 创建 GitHub 仓库 如果你还没有在 GitHub 上创建仓库,首先需要创建一个新的仓库: 登录到 GitHub。点击右上角的 按钮,选择 New repository。给你的仓库起个名字,并选择 Public 或 Privat…...
vue2中 computed 计算属性
文章目录 vue2中 computed 计算属性1. 什么是计算属性?2. 基本用法1. 定义计算属性2. 计算属性的缓存特性 3. 计算属性的高级用法1. 计算属性的 Getter 和 Setter 方法2. 计算属性的依赖追踪 4. 计算属性与方法的区别5. 实际应用案例1. 格式化数据2. 计算总价3. 动态…...
自定义基座实时采集uniapp日志
自定义基座实时采集uniapp日志 打测试包给远端现场(测试/客户)实际测试时也能实时看到日志了,也有代码行数显示。 流程设计 #mermaid-svg-1I5W9r1DU4xUsaTF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid…...
基于YALMIP和cplex工具箱的微电网最优调度算法matlab仿真
目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 系统建模 4.2 YALMIP工具箱 4.3 CPLEX工具箱 5.完整工程文件 1.课题概述 基于YALMIP和cplex工具箱的微电网最优调度算法matlab仿真。通过YALMIP和cplex这两个工具箱,完成微电网的最优调…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
