当前位置: 首页 > news >正文

小白零基础如何搭建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’。
在这里插入图片描述

inputimport 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类&#xff08;Class&#xff09;和对象&#xff08;Object&#xff09; class Animal:"""定义一个动物类Animal&#xff0c;包含基本属性和行为。"""def __init__(self, name, species, age0):"""__init__…...

在vivado中对数据进行延时,时序对齐问题上的理清

在verilog的ISP处理流程中&#xff0c;在完成第一个模块的过程中&#xff0c;我经常感到困惑&#xff0c;到底是延时了多少个时钟&#xff1f;今日对这几个进行分类理解。 目录 1.输入信号激励源描述 1.1将数据延时[9]个clk 1.2将vtdc与hzdc延时[9]个clk(等价于单bit的数据…...

《只狼》运行时提示“mfc140u.dll文件缺失”是什么原因?要怎么解决?

《只狼》运行时提示“mfc140u.dll文件缺失”是什么原因&#xff1f;要怎么解决&#xff1f; 宝子们&#xff0c;是不是在玩《只狼》的时候&#xff0c;突然弹出一个提示&#xff1a;“找不到mfc140u.dll文件”&#xff1f;这可真是让人着急上火&#xff01;别慌&#xff0c;今…...

vue学习笔记7

打包发布 目标&#xff1a;明确打包的作用 说明&#xff1a;vue脚手架只是开发过程中&#xff0c;协助开发的工具&#xff0c;当真正开发完了 > 脚手架不参与上线 打包的作用&#xff1a; 将多个文件压缩合并成一个文件&#xff0c;语法降级&#xff0c;less sass ts 语法…...

Unity 增量打包AssetBundle

背景 打包太慢了&#xff0c;想要没改动的资源不重新打包浪费时间。 来源 官方文章&#xff1a;https://forum.unity.com/threads/about-incremental-build-and-asset-bundle-hashes.1436032/ 官网AB介绍&#xff1a;https://learn.unity.com/tutorial/assets-resources-and…...

嵌入式八股文面试题(二)C语言算法

相关概念请查看文章&#xff1a;C语言概念。 1. 如何实现一个简单的内存池&#xff1f; 简单实现&#xff1a; #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 抽屉组件高度封装

在前端开发中&#xff0c;ElementUI 的el-drawer组件虽实用&#xff0c;但为满足复杂业务需求&#xff0c;如统一样式、特定交互和灵活使用&#xff0c;常需二次封装。下面将带你实现一个高度封装的 ElementUI 抽屉组件。 创建基础封装组件 创建MyDrawer.vue&#xff0c;引入e…...

深入解析:如何在C#和C/C++之间安全高效地通过P/Invoke传递多维数组

在工业控制、机器人编程和物联网等领域&#xff0c;我们经常需要让C#这样的托管语言与C/C编写的底层库进行交互。在这个过程中&#xff0c;遇到需要传递多维数组的场景时&#xff0c;许多开发者会意外遭遇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&#xff0c;OpenAI 用短短几年时间&#xff0c;彻底改变了自然语言处理&#xff08;NLP&#xff09;的格局。让我们一起回顾这段激动人心的技术演进史&#xff01;&#x1f680; &#x1f539; GPT&#xff08;2018&#xff09;&#xff1a; 划时代的起点&a…...

C#语言的云计算

C#语言在云计算中的应用 引言 随着信息技术的飞速发展&#xff0c;云计算已经成为了现代计算架构的重要组成部分。传统的本地计算方式逐渐被云计算所取代&#xff0c;使得企业与开发者能够更高效地处理数据、部署应用程序以及进行资源管理。在众多编程语言中&#xff0c;C#以…...

金仓数据库-KingbaseES-学习-01-单机部署(非图形化安装)

目录 一、环境信息 二、介绍 三、下载地址 四、安装步骤 1、配置内核参数 &#xff08;1&#xff09;文件系统相关 &#xff08;2&#xff09;共享内存与信号量&#xff08;IPC&#xff09; &#xff08;3&#xff09;网络与端口配置 &#xff08;4&#xff09;关键场…...

海外服务器都有什么作用?

海外服务器具体就是指部署在中国大陆以外地区的服务器&#xff0c;企业选择租用海外服务器能够显著提高不同国家和地区用户的访问速度&#xff0c;当网站的服务器部署在目标用户所在地附近时&#xff0c;数据信息所传输的距离就会缩短&#xff0c;大大降低了网络访问的延迟度&a…...

git bash在github的库中上传或更新本地文件

一、将本地文件上传到 GitHub 仓库 1. 创建 GitHub 仓库 如果你还没有在 GitHub 上创建仓库&#xff0c;首先需要创建一个新的仓库&#xff1a; 登录到 GitHub。点击右上角的 按钮&#xff0c;选择 New repository。给你的仓库起个名字&#xff0c;并选择 Public 或 Privat…...

vue2中 computed 计算属性

文章目录 vue2中 computed 计算属性1. 什么是计算属性&#xff1f;2. 基本用法1. 定义计算属性2. 计算属性的缓存特性 3. 计算属性的高级用法1. 计算属性的 Getter 和 Setter 方法2. 计算属性的依赖追踪 4. 计算属性与方法的区别5. 实际应用案例1. 格式化数据2. 计算总价3. 动态…...

自定义基座实时采集uniapp日志

自定义基座实时采集uniapp日志 打测试包给远端现场(测试/客户)实际测试时也能实时看到日志了&#xff0c;也有代码行数显示。 流程设计 #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这两个工具箱&#xff0c;完成微电网的最优调…...

为什么电路中的阻抗需要引入复数?

1、方便计算说法▼无他&#xff0c;就是图个方便计算而已。请看下题&#xff0c;求如图所示电路中电流的大小。电流的频率与电压频率相同&#xff0c;无非就是求解幅值的变化和相位的变化。▼引用一下以前我的一个知乎回答&#xff0c;数学中的数先是从一维数轴开始。▼因电路的…...

【Oracle数据库指南】第03篇:Oracle SQL分组统计与排序——GROUP BY、HAVING与ORDER BY深度解析

上一篇【第02篇】Oracle SQL查询高级技巧——条件与函数 下一篇【第04篇】Oracle多表查询与连接操作——JOIN的全面解析 摘要 本文详细讲解Oracle SQL中的分组统计功能&#xff0c;包括分组函数&#xff08;COUNT、SUM、AVG、MAX、MIN等&#xff09;的用法、GROUP BY子句的多列…...

从Bode图到PI参数:基于开环传函特性的转速环整定实战解析

1. 转速环PI参数整定的核心逻辑 我第一次接触电机控制时&#xff0c;面对转速环PI参数整定这个"黑箱"完全无从下手。直到把Bode图和PI参数的关系捋清楚&#xff0c;才发现原来频域分析才是解开这个谜团的钥匙。转速环本质上是个闭环系统&#xff0c;但我们要整定PI参…...

IDEA(2021.3.2)模块右侧Maven中不显示Dependencies问题

前言&#xff1a;今天在B站大学上想学点东西的时候&#xff0c;发现了这个问题&#xff0c;根目录中有两个模块&#xff0c;分别是01,02我嫌麻烦就复制了一份为03&#xff0c;在刷新maven的过程中报错&#xff08;主要就是不展示Dependencies&#xff09;然后百思不得其解&…...

Flutter 路由导航完全指南

Flutter 路由导航完全指南 引言 路由导航是任何移动应用的核心功能之一。Flutter 提供了强大而灵活的路由系统&#xff0c;支持多种导航方式。本文将深入探讨 Flutter 路由导航的各种技巧和最佳实践。 基础导航 Navigator.push Navigator.push(context,MaterialPageRoute(…...

Mac上Gradle报错‘Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7’?三步搞定版本兼容问题

Mac上Gradle报错‘Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7’的深度解析与解决方案 最近在MacOS上使用Gradle构建项目时&#xff0c;不少开发者遇到了一个棘手的错误&#xff1a;Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7。…...

独立开发者如何借助Taotoken以更低成本体验多种大模型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 独立开发者如何借助Taotoken以更低成本体验多种大模型 对于独立开发者或个人项目而言&#xff0c;技术选型与成本控制是项目初期面…...

BooruDatasetTagManager:AI训练数据标注效率提升10倍的智能解决方案

BooruDatasetTagManager&#xff1a;AI训练数据标注效率提升10倍的智能解决方案 【免费下载链接】BooruDatasetTagManager 项目地址: https://gitcode.com/gh_mirrors/bo/BooruDatasetTagManager 在AI模型训练领域&#xff0c;数据标注的质量直接决定了模型的最终表现。…...

Adobe-GenP 3.0:AutoIt实现的Adobe CC二进制补丁机制深度分析

Adobe-GenP 3.0&#xff1a;AutoIt实现的Adobe CC二进制补丁机制深度分析 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe Creative Cloud系列软件作为创意行业…...

从‘//’到‘///’:解锁C#注释的正确姿势与隐藏的IDE效率技巧

从‘//’到‘///’&#xff1a;解锁C#注释的正确姿势与隐藏的IDE效率技巧 在代码的世界里&#xff0c;注释就像地图上的标记&#xff0c;不仅指引着后来的开发者理解代码的意图&#xff0c;更是开发者与未来自己对话的桥梁。对于C#开发者而言&#xff0c;注释不仅仅是简单的代…...