深度学习pytorch——卷积神经网络(持续更新)

计算机如何解析图片?

在计算机的眼中,一张灰度图片,就是许多个数字组成的二维矩阵,每个数字就是此点的像素值(图-1)。在存储时,像素值通常位于[0, 255]区间,在深度学习中,像素值通常位于[0, 1]区间。

图-1

一张彩色图片,是使用三张图片叠加而成,即RGB(red green blue)(图-2)。

图-2

什么是卷积?

标准的神经网络是全连接的方式,全连接会获取更多的信息,但同时也包含着巨大的算力需求。在以前,算力完全不足以支撑如此巨大的计算量,但是又要进行处理,因此当时的人们联想到了人类观察事物的过程,即结合人眼观察事物的角度——先观察吸引我们的点,忽略不吸引我们的点,这称为局部相关性(Receptive Field。应用到神经网络中,就出现了卷积的概念。

卷积操作就是先仅仅观察一部分,然后移动视野观察下一部分,这就称为卷积操作(图-3)。

图-3

表现在神经网络中就相当于只连接局部相关性的属性(假设红色的线都是相关的,其它的都断开,当然红色的线都是我自己瞎画的),如图-4所示:

图-4

 表现在实例上就是图-5的情况:

图-5

卷积的数学表示:设x(t)为输入的数据,h(t)为遍历使用的矩阵,y(t)为经过卷积计算得到的矩阵,将x(t)和h(t)进行点乘运算,将每次点成的结果进行累加得到y(t)对应元素的值(公式-1)。 

公式-1

 宏观效果(图-6):

图-6

实例

以不同的 h(t) 进行卷积操作,会获取到不同的特征:

锐化(图-7):

图-7

 模糊处理(图-8):

图-8

 边缘检测(图-9):

图-9

卷积神经网络

 图-3 是以1个Kernel_channel进行卷积运算。以多个Kernel_channels进行卷积运算(图-10):

图-10

假设原来的图像是一个28*28的灰度图像,即[1, 28, 28]。使用3*3的特征矩阵以7个角度来观察这副图像,最后得到的卷积层是[7, 26, 26]。

称呼声明:

Input_channels :输入的图像的通道,彩色图像就是3,灰度图像就是1

Kernel_channels: 以多少个视角来观察图像

Kernel_size : 特征矩阵的size

Stride: 每次向下/左移动的步长

Padding: 空白的数量,补0

实例(图-11),注意右下角的标注,每个圈中的值必须相等。将同一视角不同通道得出来的矩阵进行叠加,最后会得到一个高维的特性。卷积的过程叫做特征提取。 

图-11

输出图像的大小计算(公式-2):

公式-2

代码示例:

# 1、
x=torch.rand(1,1,28,28)  #[b,c,h,w]
layer=nn.Conv2d(1,3,kernel_size=3,stride=1,padding=0) # weight [3,1,3,3],不补零
out=layer.forward(x)
print(out.shape)
#torch.Size([1, 3, 26, 26])# 2、
layer=nn.Conv2d(1,3,kernel_size=3,stride=1,padding=1) # weight [3,1,3,3],补零
out=layer.forward(x)
print(out.shape)
#torch.Size([1, 3, 14, 14])# 3、
layer=nn.Conv2d(1,3,kernel_size=3,stride=2,padding=1) # weight [3,1,3,3],补零
out=layer.forward(x)
print(out.shape)
#torch.Size([1, 3, 14, 14])# 说明:
#现在基本不用layer.forward,而是用layer
out=layer(x) #推荐使用
print(out.shape)
#torch.Size([1, 3, 14, 14])###### inner weight $ bias #########
#直接调用
print(layer.weight)
# Parameter containing:
# tensor([[[[-0.1249, -0.3302, -0.1774],
#           [-0.1542,  0.0873,  0.0282],
#           [-0.0006, -0.1798, -0.1030]]],
#
#
#         [[[ 0.1932,  0.3240,  0.1747],
#           [-0.2188, -0.1775, -0.0652],
#           [-0.1455, -0.1220,  0.0629]]],
#
#
#         [[[ 0.2596,  0.3017,  0.2028],
#           [-0.2629, -0.0715,  0.3267],
#           [ 0.3174, -0.1441, -0.1714]]]], requires_grad=True)print(layer.weight.shape)
# torch.Size([3, 1, 3, 3])print(layer.bias.shape)
# torch.Size([3])

向上/向下采样

最大采样,选取最大的(图-12):

图-12

 代码演示:

x=out
print(x.shape)
#torch.Size([1, 3, 14, 14])layer=nn.MaxPool2d(2,stride=2) #最大池化,2*2的滑动窗口,步长为2
out=layer(x) #推荐使用
print(out.shape)
#torch.Size([1, 3, 7, 7])

平均采样,选择平均值(图-13):

图-13

 代码演示:

x=out
print(x.shape)
#torch.Size([1, 3, 14, 14])out=F.avg_pool2d(x,2,stride=2) #平均池化,2*2的滑动窗口,步长为2
print(out.shape)
#torch.Size([1, 3, 7, 7])

上采样,选取最邻近的(图-14):

扩展到卷积层呢?以一个5层的卷积层为例,进行分析:

 代码演示:

x=out
print(out.shape)
# torch.Size([1, 3, 7, 7])
out=F.interpolate(x,scale_factor=2,mode='nearest')# 为放大倍数
print(out.shape) 
# torch.Size([1, 3, 14, 14])
out=F.interpolate(x,scale_factor=3,mode='nearest')
print(out.shape)
# torch.Size([1, 3, 21, 21])

 扩展到卷积层

图-16

1、输入是一个32*32的灰度图像[1, 32, 32],使用一个3*3的特征矩阵进行卷积,分别从6个角度进行卷积,步长为1,会得到一个[6,1,28,28]的图像
2、上采样-》[6,1,14,14]
3、卷积-》[16,1,10,10]
4、上采样-》[16,1,5,5]
5、全连接
6、全连接
7、高斯分布

ReLU

图-17

 代码演示:

#两种方式,一种是nn.ReLU,另一种是F.relu
x=out
print(x.shape)
#torch.Size([1, 3, 7, 7])layer=nn.ReLU(inplace=True)
out=layer(x)
print(out.shape)
#torch.Size([1, 3, 7, 7])#与上面三行等价
out=F.relu(x)
print(out.shape)
#torch.Size([1, 3, 7, 7])#relu激活函数并不改变size大小

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

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

相关文章

《QT实用小工具·四》屏幕拾色器

1、概述 源码放在文章末尾 该项目实现了屏幕拾色器的功能,可以根据鼠标指定的位置识别当前位置的颜色 项目功能包含: 鼠标按下实时采集鼠标处的颜色。 实时显示颜色值。 支持16进制格式和rgb格式。 实时显示预览颜色。 根据背景色自动计算合适的前景色…

Jenkins详细安装配置部署

目录 简介一、安装jdk二、安装jenkins这里如果熟悉 Jenkins ,可以【选择插件来安装】,如果不熟悉,还是按照推荐来吧。注意: 三、插件安装如果上面插件安装,选择的不是【安装推荐的插件】,而是【选择插件来安…

论文阅读-《Lite Pose: Efficient Architecture Design for 2D Human Pose Estimation》

摘要 这篇论文主要研究了2D人体姿态估计的高效架构设计。姿态估计在以人为中心的视觉应用中发挥着关键作用,但由于基于HRNet的先进姿态估计模型计算成本高昂(每帧超过150 GMACs),难以在资源受限的边缘设备上部署。因此&#xff0…

C#使用SQLite(含加密)保姆级教程

C#使用SQLite 文章目录 C#使用SQLite涉及框架及库复制runtimes创建加密SQLite文件生成连接字串执行SQL生成表SQLiteConnectionFactory.cs 代码结构最后 涉及框架及库 自己在NuGet管理器里面安装即可 Chloe.SQLite:ORM框架Microsoft.Data.Sqlite.Core:驱…

SAMRTFORMS 转换PDF 发送邮件

最终成果: *&---------------------------------------------------------------------**& Report ZLC_FIND_EXIT*&---------------------------------------------------------------------**&根据T-CODE / 程序名查询出口、BADI增强*&-------…

深入MNN:开源深度学习框架的介绍、安装与编译指南

引言 在人工智能的世界里,深度学习框架的选择对于研究和应用的进展至关重要。MNN,作为一个轻量级、高效率的深度学习框架,近年来受到了众多开发者和研究人员的青睐。它由阿里巴巴集团开源,专为移动端设备设计,支持跨平…

【Canvas与艺术】五角星光芒四射的效果展示

【关键点】 三一渐变式光芒的实现。 【效果】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>光芒四射</title><st…

在.Net6中用gdal实现第一个功能

目录 一、创建.NET6的控制台应用程序 二、加载Gdal插件 三、编写程序 一、创建.NET6的控制台应用程序 二、加载Gdal插件 Gdal的资源可以经过NuGet包引入。右键单击项目名称&#xff0c;然后选择 "Manage NuGet Packages"&#xff08;管理 NuGet 包&#xff09;。N…

面向对象特征一:封装性

9.1 为什么需要封装&#xff1f; 我要用洗衣机&#xff0c;只需要按一下开关和洗涤模式就可以了。有必要了解洗衣机内部的结构吗&#xff1f;有必要 碰电动机吗&#xff1f; 我要开车&#xff0c;我不需要懂离合、油门、制动等原理和维修也可以驾驶。 客观世界里每一个事物…

【Java面试题】Redis中篇(高可用:主从复制、哨兵、集群)

文章目录 高可用14.Redis如何保证高可用&#xff1f;15.Redis的主从复制&#xff1f;16.Redis主从有几种常见的拓扑结构&#xff1f;17.Redis的主从复制原理了解吗&#xff1f;18.说说主从数据同步的方式&#xff1f;19.主从复制存在的问题&#xff1f;20.Redis Sentinel(哨兵)…

基于Spring Boot 3 + Spring Security6 + JWT + Redis实现接口资源鉴权

紧接上一篇文章&#xff0c;基于Spring Boot 3 Spring Security6 JWT Redis实现接口资源鉴权 系列文章指路&#x1f449; 系列文章-基于SpringBoot3创建项目并配置常用的工具和一些常用的类 项目源码&#x1f449; /shijizhe/boot-test 文章目录 1. 修改 UserDetailsServic…

python爬虫之selenium4使用(万字讲解)

文章目录 一、前言二、selenium的介绍1、优点&#xff1a;2、缺点&#xff1a; 三、selenium环境搭建1、安装python模块2、selenium4新特性3、安装驱动WebDriver驱动选择驱动安装和测试 基础操作1、属性和方法2、单个元素定位通过id定位通过class_name定位一个元素通过xpath定位…

C语言学习-Day23-函数递归2

接上一天&#xff0c;练习2&#xff1a;编写函数不允许创建临时变量&#xff0c;求字符串的长度。 实现方式1&#xff1a; int my_strlen(char* str) { int count 0; while (*str ! \0) { count; str; } return count; } int main() { char arr[] "bit"; //[b]…

写作类AI推荐(二)

本章要介绍的写作AI如下&#xff1a; 火山写作 主要功能&#xff1a; AI智能创作&#xff1a;告诉 AI 你想写什么&#xff0c;立即生成你理想中的文章AI智能改写&#xff1a;选中段落句子&#xff0c;可提升表达、修改语气、扩写、总结、缩写等文章内容优化&#xff1a;根据全文…

Modelsim手动仿真实例

目录 1. 软件链接 2. 为什么要使用Modelsim 3. Modelsim仿真工程由几部分组成&#xff1f; 4. 上手实例 4.1. 新建文件夹 4.2. 指定目录 4.3. 新建工程 4.4. 新建设计文件&#xff08;Design Files&#xff09; 4.5. 新建测试平台文件&#xff08;Testbench Files&…

YOLOv9改进策略 :block优化 | 无需TokenMixer也能达成SOTA性能的极简ViT架构 | CVPR2023 RIFormer

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a; token mixer被验证能够大幅度提升性能&#xff0c;但典型的token mixer为自注意力机制&#xff0c;推理耗时长&#xff0c;计算代价大&#xff0c;而RIFormers是无需TokenMixer也能达成SOTA性能的极简ViT架构…

代下载全网资源

尊敬的用户&#xff1a; 感谢您一直以来对我们的支持和关注&#xff01;为了更好地满足用户的需求&#xff0c;我们决定在全网源码程序和软件代下载方面进行服务升级。 作为全网资源代下载服务的一部分&#xff0c;我们将提供全面的源码程序和软件代下载服务。无论是开源项目…

资源免费分享了

为了解决粉丝们在学习过程中&#xff0c;出现没有资料&#xff0c;没有书籍&#xff0c;搜索引擎搜索不精准&#xff0c;没有恰当的博文等这一类情况&#xff0c;今天&#xff0c;我将我曾经的学习资料&#xff0c;免费分享给大家&#xff01; 博主声明:此并非过度宣传&#x…

英伟达文本生成3D模型论文:Magic3D: High-Resolution Text-to-3D Content Creation解读

一、摘要 摘要&#xff1a;DreamFusion 最近展示了使用预训练的文本到图像扩散模型来优化神经辐射场 (NeRF) 的实用性&#xff0c;实现了显着的文本到 3D 合成结果。然而&#xff0c;该方法有两个固有的局限性&#xff1a;&#xff08;a&#xff09;NeRF 的优化极慢和&#xf…

Android逆向-数据修改逻辑修改视图修改

目录 0x00 相关工具及环境 0x01 APP逆向 - 数据修改 0x02 APP逆向 - 逻辑修改 0x03 APP逆向 - 视图修改 希望和各位大佬一起学习&#xff0c;如果文章内容有错请多多指正&#xff0c;谢谢&#xff01; 个人博客链接&#xff1a;CH4SER的个人BLOG – Welcome To Ch4sers B…