博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
全连接层、卷积层、池化层
阅读量:2117 次
发布时间:2019-04-29

本文共 2375 字,大约阅读时间需要 7 分钟。

深度学习

基础知识和各种网络结构实战 ...

全连接层、卷积层、池化层

前言

全连接层、卷积层、池化层用pytorch实现

一、全连接层

1.1 全连接层概念

全连接层 Fully Connected Layer 一般位于整个卷积神经网络的最后,负责将卷积输出的二维特征图转化成一维的一个向量,由此实现了端到端的学习过程(即:输入一张图像或一段语音,输出一个向量或信息)。全连接层的每一个结点都与上一层的所有结点相连因而称之为全连接层。由于其全相连的特性,一般全连接层的参数也是最多的。

1.2 主要作用

全连接层的主要作用就是将上层(卷积、池化等层)计算得到的特征空间映射样本标记空间。简单的说就是将特征表示整合成一个值,其优点在于减少特征位置对于分类结果的影响,提高了整个网络的鲁棒性。

二、卷积层

卷积层与全连接层不同,它保留了输入图像的空间特征,即输入一张32 * 32 * 3的图片而言,卷积层输入就是32 * 32 * 3的矩阵

卷积核(Keral):常简称为卷积,有时也叫滤波器filter,卷积的大小可以在实际需要时自定义其长和宽(常将其设为:1 * 1,3 * 3,5 * 5),其通道数常与输入图片通道数设置一样

2.1 pytorch中的卷积函数

import torchtorch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)# in_channels (int) :输入图片的channel# out_channels (int) :输出图片(特征层)的channel# kernel_size (int or tuple) :kernel卷积核的大小# stride (int or tuple, optional) :卷积的步长,默认为1# padding (int or tuple, optional) :四周pad的大小,默认为0# dilation (int or tuple, optional) :kernel元素间的距离,默认为1(dilation翻译为扩张,有时候也称为“空洞”,有专门的文章研究dilation convolution)# groups (int, optional) :将原始输入channel划分成的组数,默认为1(初级读者暂时可以不细究其用处)# bias (bool, optional) :如果是Ture,则输出的bias可学,默认为 True

三、池化层

池化pooling是对图片进行压缩(降采样)的一种方法,池化的方法有很多,如max pooling、average pooling

池化层也有操作参数,我们假设输入图像为W1H1D1(宽通道数),池化层的参数中,池化kernel的大小为F*F,步长为S,
那么经过池化后输出的图像的宽、高、channel分别为:W2=((W1-F)/S)+1 H2=((H1-F)/S)+1 D2=D1
通常情况下F=2,=2,

3.1 pytorch实现

import torchimport torch.nn.functional as Fimport torch.nn as nnclass Net(nn.Module):    def __init__(self):        super(Net,self).__init__()        self.conv1=nn.Conv2d(3,6,5)#卷积层1        self.pool=nn.MaxPool2d(2,2)#池化        self.conv2=nn.Conv2d(6,16,5)        self.fc1 = nn.Linear(16 * 5 * 5, 120)  # 全连接层        self.fc2 = nn.Linear(120, 84)  # 全连接层        self.fc3 = nn.Linear(84, 10)  # 最后一个全连接层用作10分类    def forward(self, x):  # 使用__init__中的定义,构建卷积神经网络结构        x = self.pool(F.relu(self.conv1(x)))  # 第一个卷积层首先要经过relu做激活,然后使用前面定义好的nn.MaxPool2d(2, 2)方法做池化        x = self.pool(F.relu(self.conv2(x)))  # 第二个卷积层也要经过relu做激活,然后使用前面定义好的nn.MaxPool2d(2, 2)方法做池化        x = x.view(-1, 16 * 5 * 5)  # 对特征层tensor维度进行变换        x = F.relu(self.fc1(x))  # 卷积神经网络的特征层经过第一次全连接层操作,然后再通过relu层激活        x = F.relu(self.fc2(x))  # 卷积神经网络的特征层经过第二次全连接层操作,然后再通过relu层激活        x = self.fc3(x)  # 卷积神经网络的特征层经过最后一次全连接层操作,得到最终要分类的结果(10类标签)        return x

net = Net()

四、批量范化层

批量范化层(BatchNorm)是2015年loffe和Szegedy提出的想法,主要是为了加速神经网络的收敛过程以及提高训练中的稳定性。

总结

期待大家和我交流,留言或者私信,一起学习,一起进步!

转载地址:http://gslef.baihongyu.com/

你可能感兴趣的文章
如何添加网站favicon.ico图标
查看>>
cvs no such repository 问题
查看>>
MySQL中REGEXP正则表达式
查看>>
服务端UDP双向通信学习资料
查看>>
Mina TCP 编码解码相关资料收集
查看>>
Maven 打包 上传 运行
查看>>
Maven插件wagon-maven-plugin自动化部署
查看>>
使用wagon-maven-plugin插件自动部署项目
查看>>
Maven 打包的三种方式 和 Springboot 分离jar包
查看>>
ActiveMQ中Session设置的相关理解
查看>>
Linux Python 2.7.15
查看>>
Nexus配置Linux Yum Repository
查看>>
Nexus Python pip Repository
查看>>
Linux Mysql 8.0.1
查看>>
Python pymqi 连接 IBM MQ
查看>>
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof 详解
查看>>
Java - JVM TLAB、对象在内存中安置顺序、垃圾收集、回收算法
查看>>
转: 关于Linux与JVM的内存关系分析
查看>>
(转)Java 程序员必备的高效 Intellij IDEA 插件
查看>>
局域网(内网)docker安装及代理访问
查看>>