小白零基础如何搭建CNN

news2025/2/13 13:42:25

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>)

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

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

相关文章

【Java八股文】01-Java基础面试篇

【Java八股文】01-Java基础面试篇 概念Java特点Java为什么跨平台JVM、JDK、JRE关系 面向对象什么是面向对象&#xff0c;什么是封装继承多态&#xff1f;多态体现的方面面向对象设计原则重载重写的区别抽象类和实体类区别Java抽象类和接口的区别抽象类可以被实例化吗 深拷贝浅拷…

k8s部署logstash

1. 编写logstash.yaml配置文件 --- apiVersion: v1 kind: Service metadata:name: logstash spec:type: ClusterIPclusterIP: Noneports:- name: logstash-tcpport: 5000targetPort: 5000- name: logstash-beatsport: 5044targetPort: 5044- name: logstash-apiport: 9600targ…

Arcgis/GeoScene API for JavaScript 三维场景底图网格设为透明

项目场景&#xff1a; 有时候加载的地图服务白色区域会露底&#xff0c;导致在三维场景时&#xff0c;露出了三维网格&#xff0c;影响效果&#xff0c;自此&#xff0c;我们需要将三维场景的底图设为白色或透明。 问题描述 如图所示&#xff1a; 解决方案&#xff1a; 提示…

《qt open3d网格拉普拉斯平滑》

qt open3d网格拉普拉斯平滑 效果展示二、流程三、代码效果展示 二、流程 创建动作,链接到槽函数,并把动作放置菜单栏 参照前文 三、代码 1、槽函数实现 void on_actionFilterLaplacian_triggered();void MainWindow::on_actionFil

怎么选择免费的SEO排名工具

随着2025年互联网的迅猛发展&#xff0c;越来越多的企业意识到&#xff0c;拥有一个高排名的网站对于品牌曝光和吸引客户至关重要。尤其是通过SEO&#xff08;搜索引擎优化&#xff09;&#xff0c;可以提高网站在搜索引擎中的排名&#xff0c;进而带来更多的自然流量&#xff…

SSH隧道+Nginx:绿色通道详解(SSH Tunnel+nginx: Green Channel Detailed Explanation)

SSH隧道Nginx&#xff1a;内网资源访问的绿色通道 问题背景 模拟生产环境&#xff0c;使用两层Nginx做反向代理&#xff0c;请求公网IP来访问内网服务器的网站。通过ssh隧道反向代理来实现&#xff0c;重点分析一下nginx反代的基础配置。 实验环境 1、启动内网服务器的tomca…

Spring 项目接入 DeepSeek,分享两种超简单的方式!

⭐自荐一个非常不错的开源 Java 面试指南&#xff1a;JavaGuide &#xff08;Github 收获148k Star&#xff09;。这是我在大三开始准备秋招面试的时候创建的&#xff0c;目前已经持续维护 6 年多了&#xff0c;累计提交了 5600 commit &#xff0c;共有 550 多位贡献者共同参与…

半小时在本地部署DeepSeek的Janus Pro,进行图片分析和文生图

半小时在本地部署DeepSeek的Janus Pro&#xff0c;进行图片分析和文生图 下载Janus Pro源代码下载模型文件创建Python虚拟环境安装依赖包Janus Pro测试运行程序图片分析测试文生图测试使用中文提示词使用英文提示词 测试印象&#xff1a; 整体模型体积较小&#xff0c;个人可以…

急停信号的含义

前言&#xff1a; 大家好&#xff0c;我是上位机马工&#xff0c;硕士毕业4年年入40万&#xff0c;目前在一家自动化公司担任软件经理&#xff0c;从事C#上位机软件开发8年以上&#xff01;我们在开发C#的运动控制程序的时候&#xff0c;一个必要的步骤就是确认设备按钮的急停…

设置mysql的主从复制模式

mysql设置主从复制模式似乎很容易&#xff0c;关键在于1&#xff09;主库启用二进制日志&#xff0c;2&#xff09;从库将主库设为主库。另外&#xff0c;主从复制&#xff0c;复制些什么&#xff1f;从我现在获得的还很少的经验来看&#xff0c;复制的内容有表&#xff0c;用户…

三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测(Maltab)

三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测&#xff08;Maltab&#xff09; 完整代码私信回复三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测&#xff08;Maltab&#xff09; 一、引言 1、研究背景和意义 在现代数据科学领域&#xff0c;时间序列…

ArcGIS基础知识之ArcMap基础设置——ArcMap选项:常规选项卡设置及作用

作为一名 GIS 从业者,ArcMap 是我们日常工作中不可或缺的工具。对于初学者来说,掌握 ArcMap 的基础设置是迈向 GIS 分析与制图的第一步。今天,就让我们一起深入了解 ArcMap 选项中常规选项卡的各个设置,帮助大家更好地使用这款强大的软件。 在 ArcMap 中,常规选项卡是用户…

14,.左下角的值,路径和,由序列确定树

找树左下角的值 迭代法 层序遍历 class Solution { public:int findBottomLeftValue(TreeNode* root) {queue<TreeNode*> qu;qu.push(root);TreeNode* leftqu.front();while(!qu.empty()){int szqu.size();leftqu.front();for(int i0;i<sz;i){TreeNode* curqu.fron…

【推理llm论文精读】DeepSeek V3技术论文_精工见效果

先附上原始论文和效果对比https://arxiv.org/pdf/2412.19437 摘要 (Abstract) DeepSeek-V3是DeepSeek-AI团队推出的最新力作&#xff0c;一个强大的混合专家&#xff08;Mixture-of-Experts&#xff0c;MoE&#xff09;语言模型。它拥有671B的总参数量&#xff0c;但每个tok…

python自动化测试之Pytest框架之YAML详解以及Parametrize数据驱动!

一、YAML详解 YAML是一种数据类型&#xff0c;它能够和JSON数据相互转化&#xff0c;它本身也是有很多数据类型可以满足我们接口 的参数类型&#xff0c;扩展名可以是.yml或.yaml 作用&#xff1a; 1.全局配置文件 基础路径&#xff0c;数据库信息&#xff0c;账号信息&…

DeepSeek 本地部署指南

在人工智能飞速发展的今天&#xff0c;大语言模型的应用越来越广泛。DeepSeek 作为一款强大的大语言模型&#xff0c;具备出色的语言理解和生成能力。然而&#xff0c;许多用户希望能够在本地部署 DeepSeek&#xff0c;以实现更高的隐私性、更低的延迟和更好的定制化。本文将为…

[LeetCode]day21 15.三数之和

题目链接 题目描述 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复…

Unity学习part1

课程为b站【Unity教程】零基础带你从小白到超神 1、脚本执行顺序 unity的脚本执行顺序不像blender的修改器那样按顺序执行&#xff0c;而是系统默认给配置一个值&#xff0c;值越小&#xff0c;执行顺序越靠前&#xff08;注意&#xff0c;这个顺序是全局生效的&#xff09; …

【AI论文】10亿参数大语言模型能超越405亿参数大语言模型吗?重新思考测试时计算最优缩放

摘要&#xff1a;测试时缩放&#xff08;Test-Time Scaling&#xff0c;TTS&#xff09;是一种通过在推理阶段使用额外计算来提高大语言模型&#xff08;LLMs&#xff09;性能的重要方法。然而&#xff0c;目前的研究并未系统地分析策略模型、过程奖励模型&#xff08;Process …

Ubuntu20.04上搭建nginx正向代理提供上网服务

背景&#xff1a;公司很多电脑因软件管控问题不得不禁止设备上网&#xff0c;现需搭建上网代理服务器提供给这些用户使用。 操作系统&#xff1a;ubuntu20.04 工具&#xff1a;nginx-1.25.4 1、下载nginx安装包及依赖 由于nginx默认只持支持转发http协议&#xff0c;所以如…