Pytorch 卷积神经网络参数说明一

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、卷积层的定义
    • 1.常见的卷积操作
    • 2. 感受野
    • 3. 如何理解参数量和计算量
    • 4.如何减少计算量和参数量
  • 二、神经网络结构:有些层前面文章说过,不全讲
    • 1. 池化层(下采样)
    • 2. 上采样
    • 3. 激活层、BN层、FC层
      • 1).BatchNorm 层
      • 2).FC 全连接层
      • 3). dropout 层
      • 4). 损失层
  • 鸣谢


前言

  在前两个实战中,我们只学会了如何搭建神经网络,但是里面有些函数接口不明白怎么回事,在这篇文章中,我们会逐一解答。


一、卷积层的定义

nn.Conv2d(in_channels,out_channels,kernel_size,stride=1,padding = 0,dilation = 1,groups = 1,bias = True)

  1. 输入通道
  2. 输出通道
  3. 卷积核大小
  4. 移动步长
  5. 卷积核膨胀

卷积核的大小一般是 3 x 3,卷积的时候,以该元素为中心形成一个 3 x 3的格子,然后与卷积核做内积。不懂的话去小破站学学,很简单,这里不是重点。输入通道和输出通道不用过多解释,卷积核的数量。padding = 1 我们有时候发现靠边的元素卷积不够,需要进行拓展,这句话就是添加一行和一列,完成边缘元素的卷积。dilation = 1,这个是为了增加卷积核的视野感受范围,3 x 3 的卷积核变成 7 x 7 的卷积核,在分割网络中常用。卷积一个元素之后,stride = 1 移动的步长,如果等于 2 就有些元素没有中心卷积。groups = 1 分组卷积,一个卷积核为一组,可以降低计算量,主要在深度可分离卷积中。bias=True 偏执量,输出的结果经过 y = wx+b wx 可以理解卷积,b就是我们家的偏置量。

1.常见的卷积操作

  • 分组卷积
  • 空洞卷积
  • 深度可分离卷积( 分组卷积 + 1 x 1 卷积)
  • 反卷积
  • 可变型卷积,卷积核不是固定的。

2. 感受野

  指的是神经网络中卷积核看到的区域,在神经网络中,feature_map 某个元素的计算受到输入图像上某个区域的影响,这个区域就是该元素的感受野。

图 1 感受野
从图片中可以看到,卷积和的大小是 1 个与两个 3 x 3 ,两个卷积核的感受野为 5x5=25,j计算为 2 x 3 x 3 =18,如果换成大的 5 x 5 的卷积核,那么感受野的范围没有变,但是计算量变成25,显然我们一般采取小的卷积核。这样还有一个好处,网络的非线性还会增强,计算量还降低了。

3. 如何理解参数量和计算量

  • 参数量:参与计算参数的个数,占用内存空间:对于一个卷积核而言参数量: ( C i n ∗ ( K ∗ K ) + 1 ) ∗ C o u t (Cin*(K*K)+1)*Cout (Cin(KK)+1)Cout
  • FLOPS:每秒浮点运算次数,可以理解是速度,用来衡量硬件的性能。
  • FLOPs:s小写,这个就是计算量,衡量算法模型的复杂度:
    ( C i n ∗ 2 ∗ K ∗ K ) ∗ H o u t ∗ W o u t ∗ C o u t (Cin * 2 * K* K ) * Hout * Wout * Cout (Cin2KK)HoutWoutCout
  • MAC:乘加的次数
    C i n ∗ K ∗ K ∗ H o u t ∗ W o u t ∗ C o u t Cin * K* K * Hout * Wout * Cout CinKKHoutWoutCout

  FLOPs 把乘加分开算,所以乘以2,MAC 算一次,所以是 1。

4.如何减少计算量和参数量

   减少计算量很参数量还是要在卷积层动脑子,在不改变感受野和减少参数量的角度压缩矩阵:

  • 采用多个 3 x 3 的卷积核代替大的卷积核。
  • 采用深度可分离卷积核,即分组卷积
  • 通道 Shuffle
  • Pooling 层:快速下采样,可能有信息的损失。一般在前两个卷积核使用。
  • Stride = 2:卷积的步长加大
    等等

二、神经网络结构:有些层前面文章说过,不全讲

  神经网络基本可以分成这三种金典的结构,如图 2 所示。串联结构、跳连结构、并连结构。跳连结构是把部分输出直接作为输出,这样可以大幅度减少计算量。

图 2 神经网络结构

1. 池化层(下采样)

  池化层对输入特征的压缩:

  • 一方面使特征图变小,简化网络计算复杂度。
  • 一方面进行特征压缩,提取主要特征。

池化层常用两种方法:最大池化(Max Pooling)和平均池化(Average Poling),
nn.MaxPool2d(kernel_size = ,Stride = ,pading =0 ,dilation = 1,return_indeces = False,ceil_mode = False)
前四个参数就不说了,上面有。这个 return_indeces,返回的是最大值的索引,这样当我们恢复原图的时候有很大作用,相似度更近。下面是一张最大池化的图:

图 3 池化层
在 2x2 的卷积核中,取出一个最大值,4 x 4 的特征变成了一个有最大值组成 2 x 2 的特征图,这样实现了降维的目的。

2. 上采样

  上采样有两种方式:

  • Resize,如双线性插值直接放缩,类似于图像放缩。
  • 反卷积:Deconvolution,即 Transposed Convolution

代码摘要:

nn.functional.interpolate(input,size = None,scalar_factor = None,model = 'nearest',align_corners = None)nn.ConvTranspose2d(in_channels,out_channels,kernel_size, stride = 1,padding = 0,bias = True)

通常我们采用Resize进行重构,计算量小,反卷积的计算量很大。

3. 激活层、BN层、FC层

  在卷积层,其实就是一个线性操作y = wx +b w 和 b 就是卷积核的参数,线性函数并不能很好去拟合数据样本,所以我们提出激活函数来解决这一问题,旨在提高网络的非线性表达。

  • 激活函数:为了增加网络的非线性,进而增加网络的表达能力。
  • 常用函数:ReLU函数、Leakly ReLU函数、ELU 函数等
  • 语句:torch.nn.ReLU(inplace = True)

1).BatchNorm 层

  • 通过一定的规范化手段,把每层神经网络任意神经元的输入值分布强行拉倒j标准正态分布上面,均值 0 ,方差 1.
  • BatchNorm 是一种归一化的手段,他会减少图像之间的绝对差异,突出相对差异,加快模型的训练速度。
  • 不适合 image to image 和对噪声敏感的任务中
  • 语句:nn.BatchNorm2d(num_features,eps = 1e-05,momentum =0.1,affine = True,track_runing_stats = True )

BatchNorm 层可以理解为工具层,我们在卷积层也可以加入,后面在更一个ReLU层,往往就是这么干的。

2).FC 全连接层

  连接所有的特征,把输出值送给分类器(softmax层)。

  • 对前层的特征进行一个加权和,(卷积层是将输入数据映射到隐层特征空间) ,将特征空间通过线性变化映射到样本标记空间。
  • 也可以通过 1 x 1 卷积 + gloable average pooling 代替。
  • 全连接层的参数冗余,一般情况需要 Dropout 限制参数。
  • FC 层对图片的大小尺寸非常敏感。
  • 语句:nn.Linear(in_features,out_features,bias)

3). dropout 层

  • 在不同的训练中随机扔掉一些神经元。
  • 在测试中不实用随机失活,那么所有的神经元都激活。
  • 作用:为了防止和减轻过拟合才使用的函数,一般用在全链接层。
  • 语句:nn.dropout

4). 损失层

  在网络优化,反向传播时非常重要的一个层,损失函数选择取决于我们要训练的任务。

  • 损失层:设置一个损失函数用来比较输出值和目标值,通过最小损失来驱动网络的训练。
  • 网络的损失通过前向操作计算,网络的参数相较于损失函数,通过后向操作计算。
  • 分类问题损失:
    • nn.BCELoss
    • nn.CrossEntrophyLoss 等等
  • 回归问题损失:
    • nn.L1Loss
    • nn.MSELoss
    • nn.SmoothL1Loss 等等

鸣谢

  年龄越大,越不想欠谁。一生活得洒脱,一个人,几个人也快乐。如果本文对大家有帮助,还请大家浏览一下我弟新开的小店,要黄了,哈哈哈。点击这里。

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

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

相关文章

C++ 中的 iostream 库:cin/cout 基本用法

iostream 是 C 标准库中用于输入输出操作的核心库,它基于面向对象的设计,提供了比 C 语言的 stdio.h 更强大、更安全的 I/O 功能。下面详细介绍 iostream 库中最常用的输入输出工具:cin 和 cout。 一、 基本概念 iostream 库:包…

SAP复制一个自定义移动类型

SAP复制移动类型 在SAP系统中,复制移动类型201可以通过事务码OMJJ或SPRO路径完成,用于创建自定义的移动类型以满足特定业务需求。 示例操作步骤 进入OMJJ事务码: 打开事务码OMJJ,选择“移动类型”选项。 复制移动类型&#xff…

Bambu Studio 中的“回抽“与“装填回抽“的区别

回抽 装填回抽: Bambu Studio 中的“回抽” (Retraction) 和“装填回抽”(Prime/Retract) 是两个不同的概念,它们都与材料挤出机的操作过程相关,但作用和触发条件有所不同。 回抽(Retraction): 回抽的作用, 在打印机移动到另一个位置之前,将…

危化品安全监测数据分析挖掘范式:从被动响应到战略引擎的升维之路

在危化品生产的复杂生态系统中,安全不仅仅是合规性要求,更是企业生存和发展的生命线。传统危化品安全生产风险监测预警系统虽然提供了基础保障,但其“事后响应”和“单点预警”的局限性日益凸显。我们正处在一个由大数据、人工智能、数字孪生和物联网技术驱动的范式变革前沿…

C++ RPC 远程过程调用详细解析

一、RPC 基本原理 RPC (Remote Procedure Call) 是一种允许程序调用另一台计算机上子程序的协议,而不需要程序员显式编码这个远程交互细节。其核心思想是使远程调用看起来像本地调用一样。 RPC 工作流程 客户端调用:客户端调用本地存根(stub)方法参数序列化:客户端存根将参…

Python:操作 Excel 预设色

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…

中科院1区|IF10+:加大医学系团队利用GPT-4+电子病历分析,革新肝硬化并发症队列识别

中科院1区|IF10:加大医学系团队利用GPT-4电子病历分析,革新肝硬化并发症队列识别 在当下的科研领域,人工智能尤其是大语言模型的迅猛发展,正为各个学科带来前所未有的机遇与变革。在医学范畴,从疾病的早期精准筛查&am…

Python学习小结

bg:记录一下,怕忘了;先写一点,后面再补充。 1、没有方法重载 2、字段都是公共字段 3、都是类似C#中顶级语句的写法 4、对类的定义直接: class Student: 创建对象不需要new关键字,直接stu Student() 5、方…

QCustomPlot 中实现拖动区域放大‌与恢复

1、拖动区域放大‌ 在 QCustomPlot 中实现 ‌拖动区域放大‌(即通过鼠标左键拖动绘制矩形框选区域进行放大)的核心方法是设置 SelectionRectMode。具体操作步骤: 1‌)禁用拖动模式‌ 确保先关闭默认的图表拖动功能(否…

如何将文件从 iPhone 传输到闪存驱动器

您想将文件从 iPhone 或 iPad 传输到闪存盘进行备份吗?这是一个很好的决定,但您需要先了解一些实用的方法。虽然 Apple 生态系统在很大程度上是封闭的,但您可以使用一些实用工具将文件从 iPhone 或 iPad 传输到闪存盘。下文提供了这些行之有效…

互联网大厂Java求职面试:云原生架构与微服务设计中的复杂挑战

互联网大厂Java求职面试:云原生架构与微服务设计中的复杂挑战 面试官开场白 面试官(严肃模式开启):郑薪苦,欢迎来到我们的技术面试环节。我是本次面试的技术总监,接下来我们将围绕云原生架构、微服务设计、…

leetcode-hot-100 (链表)

1. 相交链表 题目链接:相交链表 题目描述:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 解答: 其实这道题目我一开始没太看懂题目给…

Web前端基础之HTML

一、浏览器 火狐浏览器、谷歌浏览器(推荐)、IE浏览器 推荐谷歌浏览器原因: 1、简洁大方,打开速度快 2、开发者调试工具(右键空白处->检查,打开调试模式) 二、开发工具 核心IDE工具 Visual Studio Code (VS Code)‌ 微软开发…

11.TCP三次握手

TCP连接建立与传输 1.主机 A 与主机 B 使用 TCP 传输数据,A 是 TCP 客户,B 是 TCP 服务器。假设有512B 的数据要传输给 B,B 仅给 A 发送确认;A 的发送窗口 swnd 的尺寸为 100B,而 TCP 数据报文段每次也携带…

Python 爬虫入门 Day 3 - 实现爬虫多页抓取与翻页逻辑

Python 第二阶段 - 爬虫入门 🎯 今日目标 掌握网页分页的原理和定位“下一页”的链接能编写循环逻辑自动翻页抓取内容将多页抓取整合到爬虫系统中 📘 学习内容详解 🔁 网页分页逻辑介绍 以 quotes.toscrape.com 为例: 首页链…

分布式定时任务系列12:XXL-job的任务触发为什么是死循环?

传送门 分布式定时任务系列1:XXL-job安装 分布式定时任务系列2:XXL-job使用 分布式定时任务系列3:任务执行引擎设计 分布式定时任务系列4:任务执行引擎设计续 分布式定时任务系列5:XXL-job中blockingQueue的应用 …

位运算详解之异或运算的奇妙操作

位运算详解之异或运算的奇妙操作 一、异或运算的本质与核心性质1.1 异或运算的定义与逻辑规则1.2 异或运算的核心代数性质(1)自反性:a ^ a 0(2)恒等性:a ^ 0 a(3)交换律&#xff1…

Element Plus 去除下拉菜单周黑边

问题: 如上图所示,当鼠标移入(hover)和点击时就会围绕一圈黑色边框,但通过本文的方案 100% 完美解决。 解决方案: :deep(:focus-visible) {outline: none; } 备用方案 :deep(.el-tooltip__trigger:focus-visible) …

React Native 项目实战 —— 记账本应用开发指南

React Native 项目实战 —— 记账本应用开发指南 项目概述:本文将指导您使用 React Native 开发一个简单的记账本应用,帮助用户记录收入和支出。核心内容:我们将分析功能模块、设计接口、划分组件结构、管理数据流、实现页面跳转&#xff0c…

从 PPO、DPO 到 GRPO:大语言模型策略优化算法解析

从 PPO、DPO 到 GRPO:大语言模型策略优化算法解析 背景与简介 大语言模型(LLM)的训练通常分为预训练和后训练两个阶段。预训练阶段,模型在海量文本上学习下一词预测的能力;后训练阶段,我们希望进一步对齐…