学习基于pytorch的VGG图像分类 day1

注:本系列博客在于汇总CSDN的精华帖,类似自用笔记,不做学习交流,方便以后的复习回顾,博文中的引用都注明出处,并点赞收藏原博主.

目录

一.VGG

(1)对VGG网络的初步认知

VGG网络结构

1.卷积层

2.全连接层

3.softmax层

(2)对各个名词的认知

1.卷积

2.液化

[3.Feature map](#3.Feature map)

4.ReLU函数

ReLU的优点

[4.1. 计算简单性](#4.1. 计算简单性)

[4.2. 代表性稀疏](#4.2. 代表性稀疏)

[4.3. 线性行为](#4.3. 线性行为)

[4.4. 训练深度网络](#4.4. 训练深度网络)

小结


一.VGG

(1)对VGG网络的初步认知

VGG网络结构

VGG由5层卷积层、3层全连接层、1层softmax输出层构成,层与层之间使用maxpool(最大化池)分开,所有隐藏层的激活单元都采用ReLU函数。

在实际使用过程中,一般都会采用16层:13个卷积层以及最后3个全连接层。

1.卷积层

卷积层(convolution layer)是卷积神经网络中的基础操作,卷积运算实际是分析数学中的一种运算方式,在卷积神经网络中通常是仅涉及离散卷积的情形。

三维输入时卷积操作实际只是将二维卷积扩展到了对应位置的所有通道上,最终将一次卷积处理的所有HWDl 个元素求和作为该位置卷积结果。

内容及图片来源:卷积层-CSDN博客

2.全连接层

全连接层(fully connected layers,FC)在整个卷积神经网络中起到"分类器"的作用。如果说卷积层、池化层和激活函数等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的"分布式特征表示".

假设你是一只小蚂蚁,你的任务是找小面包。你的视野还比较窄,只能看到很小一片区域。当你找到一片小面包之后,你不知道你找到的是不是全部的小面包,所以你们全部的蚂蚁开了个会,把所有的小面包都拿出来分享了。全连接层就是这个蚂蚁大会~

那它是怎么样把3x3x5的输出,转换成1x4096的形式?很简单,可以理解为在中间做了一个卷积。

内容及图片来源: 全连接层详解-CSDN博客

3.softmax层

softmax将输出的分类结果映射到(0-1)之间,将神经网络的分类结果转化成对应的概率。不同的概率,表示此样本属于对应类别的可能性大小,概率越大,样本属于该分类的可能性越大。概率的总和为1。

softmax位于网络输出层的后边,其在网络结构中的位置如下图所示:

隐藏层神经元计算类似,softmax层对输出数据先进行线性运算,再使用softmax激活函数将输出转化为概率。

内容及图片来源: 神经网络之softmax(作用,工作原理【示例说明】,损失计算)_softmax层-CSDN博客

图片来源:Pytorch之VGG16图像分类_vgg16能处理不同大小的图片吗-CSDN博客

(2)对各个名词的认知

1.卷积

卷积的重要的物理意义是:一个函数(如:单位响应)在另一个函数(如:输入信号)上的加权叠加。通俗的说: 在输入信号的每个位置,叠加一个单位响应,就得到了输出信号。

内容参考来源:卷积(convolution)最容易理解的解释-CSDN博客

2.液化

池化与卷积的共同点:池化操作也是原图像矩阵(或特征图矩阵)与一个固定形状的窗口(核、或者叫算子)进行计算,并输出特征图的一种计算方式;

池化与卷积的不同点:卷积操作的卷积核是有数据(权重)的,而池化直接计算池化窗口内的原始数据,这个计算过程可以是选择最大值、选择最小值或计算平均值,分别对应:最大池化、最小池化和平均池化。由于在实际使用中最大池化是应用最广泛的池化方法,以下讲述均针对于最大池化进行说明,平均池化和最小池化也是同样的作用原理。

Pytorch源码

python 复制代码
import torch
from PIL import Image
import torchvision
 
 
image = Image.open('spaceship.png').convert('RGB') #导入图片
image_to_tensor = torchvision.transforms.ToTensor()   #实例化ToTensor
original_image_tensor = image_to_tensor(image).unsqueeze(0)     #把图片转换成tensor
 
print(original_image_tensor.size())
 
maxpool = torch.nn.MaxPool2d(kernel_size=6, stride=2, padding=0)
maxpool_tensor = maxpool(original_image_tensor)
 
torchvision.utils.save_image(maxpool_tensor, 'maxpool.png')
print(maxpool_tensor.size())

图片及内容参考:Pytorch中最大池化层Maxpool的作用说明及实例使用(附代码)-CSDN博客

3.Feature map

在每个卷积层,数据都是以三维形式存在,可以看作许多个二维图像叠在一起,每一层称为feature map。

  • Feature = 二维图像*N = W*H*C=长*宽*通道
    • 灰度图像:1通道,一个feature map
    • 彩色图像:3通道RGB,三个feature map

卷积网络在学习过程中保持了图像的空间结构,也就是说最后一层的激活值(feature map)总和原始图像具有空间上的对应关系,具体对应的位置以及大小, 可以用感受野来度量。

图片及内容参考:卷积神经网络CNN/Pytorch,如何理解特征图Feature map?-CSDN博客

4.ReLU函数

在神经网络中,激活函数负责将来自节点的加权输入转换为该输入的节点或输出的激活。ReLU 是一个分段线性函数,如果输入为正,它将直接输出,否则,它将输出为零。它已经成为许多类型神经网络的默认激活函数,因为使用它的模型更容易训练,并且通常能够获得更好的性能。

ReLU的优点
4.1. 计算简单性

tanh 和 sigmoid 激活函数需要使用指数计算, 而ReLU只需要max(),因此他计算上更简单,计算成本也更低 。

4.2. 代表性稀疏

ReLU的一个重要好处是,它能够输出一个真正的零值 。这与 tanh 和 sigmoid 激活函数不同,后者学习近似于零输出,例如一个非常接近于零的值,但不是真正的零值。这意味着负输入可以输出真零值,允许神经网络中的隐层激活包含一个或多个真零值。这就是所谓的稀疏表示,是一个理想的性质,在表示学习,因为它可以加速学习和简化模型。

4.3. 线性行为

ReLU看起来更像一个线性函数,一般来说,当神经网络的行为是线性或接近线性时,它更容易优化 。这个特性的关键在于,使用这个激活函数进行训练的网络几乎完全避免了梯度消失的问题,因为梯度仍然与节点激活成正比。

4.4. 训练深度网络

ReLU的出现使得利用硬件的提升和使用反向传播成功训练具有非线性激活函数的深层多层网络成为可能 。

小结

1.卷积即是对数据的加权叠加处理,对输入信号处理后得出输出信号.

2.液化即使无权值的数据处理,是矩阵处理计算,是直接对原始数据计算.

3.feature map即是特征图,以三维形式存在,可以看作多个二维图像叠加,每一层即是feature map.计算为=长 x 宽 x 通道数

4.ReLU函数是激活函数,处理数据更好训练模型.

相关推荐
边缘计算社区18 分钟前
首个!艾灵参编的工业边缘计算国家标准正式发布
大数据·人工智能·边缘计算
游客52029 分钟前
opencv中的各种滤波器简介
图像处理·人工智能·python·opencv·计算机视觉
一位小说男主29 分钟前
编码器与解码器:从‘乱码’到‘通话’
人工智能·深度学习
深圳南柯电子1 小时前
深圳南柯电子|电子设备EMC测试整改:常见问题与解决方案
人工智能
Kai HVZ1 小时前
《OpenCV计算机视觉》--介绍及基础操作
人工智能·opencv·计算机视觉
biter00881 小时前
opencv(15) OpenCV背景减除器(Background Subtractors)学习
人工智能·opencv·学习
吃个糖糖1 小时前
35 Opencv 亚像素角点检测
人工智能·opencv·计算机视觉
IT古董2 小时前
【漫话机器学习系列】017.大O算法(Big-O Notation)
人工智能·机器学习
凯哥是个大帅比2 小时前
人工智能ACA(五)--深度学习基础
人工智能·深度学习
Code哈哈笑2 小时前
【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活
java·开发语言·学习