跟着刘二大人学pytorch(第---10---节课之卷积神经网络)

2024-06-17 01:04

本文主要是介绍跟着刘二大人学pytorch(第---10---节课之卷积神经网络),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 0 前言
    • 0.1 课程链接:
    • 0.2 课件下载地址:
  • 回忆
  • 卷积
    • 卷积过程(以输入为单通道、1个卷积核为例)
    • 卷积过程(以输入为3通道、1个卷积核为例)
    • 卷积过程(以输入为N通道、1个卷积核为例)
    • 卷积过程(以输入为N通道、M个卷积核为例)
    • Padding
    • Padding(padding=1)
    • 步长stride(stride=2)
    • 下采样(Max Pooling Layer)
    • 一个简单的例子
    • 如果有GPU的话,代码如何改
  • 结果
  • 作业

0 前言

0.1 课程链接:

《PyTorch深度学习实践》完结合集
有大佬已经写好了笔记:大佬的笔记
pytorch=0.4

0.2 课件下载地址:

链接:https://pan.baidu.com/s/1_J1f5VSyYl-Jj2qIuc1pXw
提取码:wyhu
在这里插入图片描述

回忆

全连接
在这里插入图片描述
通道×宽×高
如果按全连接的话就破坏了原来的空间信息
下采样:通道数不变,目的是减少数据量,降低运算

构建一个神经网络之前首先考虑输入的张量的维度是什么,输出的张量维度是什么,使得卷积神经网络顺利先跑起来。

所有的卷积层+下采样合起来被称为:特征提取器(Feature Extraction),即找出某种特征。

接下来介绍卷积、下采样
通过下图直观的认识这两个东西
在这里插入图片描述

卷积

讲解卷积之前,先讨论一下图像是什么

在计算机领域遇到的图像都称为RGB图像,要表示一个像素,图片被分成一个一个单元格子,每个格子有一个颜色值,这样就构成一个图像,这样的图像被称为栅格图像,相机、显微镜在处理图像时
中学时学的一个东西叫光敏电阻,该电阻可以根据光照电阻发生变化.
通过多个个光敏电阻,做成一个阵列,每个光阻通过光阻都可以反映一个范围内的光的强度,通过光的强度与电阻之间的对应关系关系,可以画出阵列所反映的图,由电阻值转变为光的强度值,该图即为黑白图。
在这里插入图片描述
像素为2×2
光阻放的越多,得到的图片的像素越大,有的手机虚表像素值,是因为将没有的像素进行了插值,取临近的一些像素值的平均值,
1)红色传感器对红色波段比较敏感,R,红色传感器中的电阻值可以反应灰度级别,即到底有多红,用0-255中的值来定义灰度的级别,以下类似
2)蓝色传感器对蓝色波段比较敏感,G
3)绿色传感器对绿色波段比较敏感,B
由上即可将光阻值转变为彩色图像
下面的额小方格就是由红绿蓝传感器组成的阵列
在这里插入图片描述
因此我们遇到的图片一般是栅格图像,还有一类图像是矢量图,这种图描述方式不和栅格图像一样。
描述矢量图是描述圆心、直径、边是什么颜色,填充什么颜色(不重要)
拿到一个图像将使用三个通道来表示
图像的坐标系的介绍见我的另一篇文章:
在这里插入图片描述

卷积过程(以输入为单通道、1个卷积核为例)

数乘:对应元素想 乘
在这里插入图片描述
在这里插入图片描述

卷积过程(以输入为3通道、1个卷积核为例)

每一个通道配一个核,通道数=核的数量
在这里插入图片描述

上面画出来的三个红色的小方块儿对应为图像中的一个patch。
图像的一个patch与一个卷积核先数乘再相加,即下面红色框出来的大方框操作称为卷积
在这里插入图片描述
见下图
在这里插入图片描述
进一步表示:
在这里插入图片描述

卷积过程(以输入为N通道、1个卷积核为例)

在这里插入图片描述
上图中,一个卷积可以得到一个最终的通道为1的结果,如果再使用一个卷积核就可以得到另外一个通道为1的结果,以此延

卷积过程(以输入为N通道、M个卷积核为例)

在这里插入图片描述
由上图发现:
1)卷积核的个数和输入的通道数是一样的(这一句应该是写错了,应修改为:卷积核的通道数和输入的图片的通道数是一样的)
2)输出的通道数和卷积核的总个数是一样的(因此只要看到输出是多少个通道,上一步的卷积就有多少个卷积核)
在这里插入图片描述
由上图知:可以将m个卷积核可以拼成一个4维的张量
定义一个卷积层只需要关系4个值:
1、输入的通道数:决定了卷积核的通道数
2、输出的通道:决定了使用了多少个卷积核
3、卷积核的大小(宽和高):这个是必须的
卷积层的定义和输入图像的大小无关
在这里插入图片描述

Padding

在这里插入图片描述

Padding(padding=1)

在这里插入图片描述
torch.nn.Conv2d(输入的通道数,输出的通道数,kernel_size,padding,bias=False)
bias是偏置量
conv_layer.weight.data = kernel.data就是将定义的卷积核的张量数值给卷积层的权重
在这里插入图片描述

步长stride(stride=2)

在这里插入图片描述
通过以上的代码得到上面的结果
在这里插入图片描述

下采样(Max Pooling Layer)

这一层没有权重,通道数不会变
例如一个2×2的max pooling,则默认步长为2,
在这里插入图片描述
通过以下的代码得到上面的结果在这里插入图片描述

一个简单的例子

在这里插入图片描述
用卷积、池化来代替之前的全连接
在这里插入图片描述
在这里插入图片描述
最后接的是交叉熵损失,所以不做激活

如果有GPU的话,代码如何改

1)模型迁移到GPU
cuda:0,表示使用第一块显卡,cuda:1表示使用第二块显卡
在这里插入图片描述
model.to(device):指的是将模型的参数、缓存、所有的模块,都放到cuda里面,都转成相应的tensor,所有涉及的权重都放进显卡里面,此时将把之前在cpu上定义模型、权重全部迁移到GPU上面
在这里插入图片描述
2)计算时把数据迁移到GPU
把要计算的张量迁移到GPU上面,主要是输入和输出
注意要将数据迁移到的显卡要和模型所要迁移的显卡要一致
训练部分需要加
在这里插入图片描述
测试部分也需要加上
在这里插入图片描述

结果

在这里插入图片描述

作业

在这里插入图片描述
比较不同配置对应的网络的性能。

这篇关于跟着刘二大人学pytorch(第---10---节课之卷积神经网络)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1068050

相关文章

YOLOv8改进 | SPPF | 具有多尺度带孔卷积层的ASPP【CVPR2018】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40+篇内容,内含各种Head检测头、损失函数Loss、Backbone、Neck、NMS等创新点改进——点击即可跳转 Atrous Spatial Pyramid Pooling (ASPP) 是一种在深度学习框架中用于语义分割的网络结构,它旨

人工智能机器学习算法总结神经网络算法(前向及反向传播)

1.定义,意义和优缺点 定义: 神经网络算法是一种模仿人类大脑神经元之间连接方式的机器学习算法。通过多层神经元的组合和激活函数的非线性转换,神经网络能够学习数据的特征和模式,实现对复杂数据的建模和预测。(我们可以借助人类的神经元模型来更好的帮助我们理解该算法的本质,不过这里需要说明的是,虽然名字是神经网络,并且结构等等也是借鉴了神经网络,但其原型以及算法本质上还和生物层面的神经网络运行原理存在

python实现最简单循环神经网络(RNNs)

Recurrent Neural Networks(RNNs) 的模型: 上图中红色部分是输入向量。文本、单词、数据都是输入,在网络里都以向量的形式进行表示。 绿色部分是隐藏向量。是加工处理过程。 蓝色部分是输出向量。 python代码表示如下: rnn = RNN()y = rnn.step(x) # x为输入向量,y为输出向量 RNNs神经网络由神经元组成, python

基于CTPN(tensorflow)+CRNN(pytorch)+CTC的不定长文本检测和识别

转发来源:https://swift.ctolib.com/ooooverflow-chinese-ocr.html chinese-ocr 基于CTPN(tensorflow)+CRNN(pytorch)+CTC的不定长文本检测和识别 环境部署 sh setup.sh 使用环境: python 3.6 + tensorflow 1.10 +pytorch 0.4.1 注:CPU环境

PyTorch模型_trace实战:深入理解与应用

pytorch使用trace模型 1、使用trace生成torchscript模型2、使用trace的模型预测 1、使用trace生成torchscript模型 def save_trace(model, input, save_path):traced_script_model = torch.jit.trace(model, input)<

神经网络第四篇:推理处理之手写数字识别

到目前为止,我们已经介绍完了神经网络的基本结构,现在用一个图像识别示例对前面的知识作整体的总结。本专题知识点如下: MNIST数据集图像数据转图像神经网络的推理处理批处理  MNIST数据集          mnist数据图像 MNIST数据集由0到9的数字图像构成。像素取值在0到255之间。每个图像数据都相应地标有“7”、“2”、“1”等数字标签。MNIST数据集中,

神经网络第三篇:输出层及softmax函数

在上一篇专题中,我们以三层神经网络的实现为例,介绍了如何利用Python和Numpy编程实现神经网络的计算。其中,中间(隐藏)层和输出层的激活函数分别选择了 sigmoid函数和恒等函数。此刻,我们心中不难发问:为什么要花一个专题来介绍输出层及其激活函数?它和中间层又有什么区别?softmax函数何来何去?下面我们带着这些疑问进入本专题的知识点: 1 输出层概述 2 回归问题及恒等函数 3

神经网络第一篇:激活函数是连接感知机和神经网络的桥梁

前面发布的文章介绍了感知机,了解了感知机可以通过叠加层表示复杂的函数。遗憾的是,设定合适的、能符合预期的输入与输出的权重,是由人工进行的。从本章开始,将进入神经网络的学习,首先介绍激活函数,因为它是连接感知机和神经网络的桥梁。如果读者认知阅读了本专题知识,相信你必有收获。 感知机数学表达式的简化 前面我们介绍了用感知机接收两个输入信号的数学表示如下:

多层感知机不等于神经网络?

在前一章节(https://blog.csdn.net/u012132349/article/details/86166324),我们介绍了感知机可以实现与门、或门、非门。只需给定合适的参数(w1, w2, b)并利用Python就可以简单实现对输入的任意(x1,x2),输出0或1。     今天我们将介绍感知机的局限性(严格说是单层感知机的局限性)。这里我们想用感知机实现异或门,所谓异

【图像识别系统】昆虫识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50

一、介绍 昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集(‘蜜蜂’, ‘甲虫’, ‘蝴蝶’, ‘蝉’, ‘蜻蜓’, ‘蚱蜢’, ‘蛾’, ‘蝎子’, ‘蜗牛’, ‘蜘蛛’)进行训练,得到一个识别精度较高的H5格式模型文件,然后使用Django搭建Web网页端可视化操作界面,实现用户上传一