自动摘要: title:回顾CNN date:2018121720:49:57 tags: CNN categories: 框架 pytorch ……..
title: 回顾-CNN
date: 2018-12-17 20:49:57
tags:
- CNN
categories:
- 框架
- pytorch
- CNN
卷积神经网络通常包含以下几种层:
1.卷积层(Convolutional layer):
卷积神经网路中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。
2.线性整流层(Rectified Linear Units layer, ReLU layer):
这一层神经的激活函数(Activation function)使用线性整流(Rectified Linear Units, ReLU)。
就像容器 不管你水怎样流 放进去都是容器形状(这叫容器整流)
3.池化层(Pooling layer):
通常在卷积层之后会得到维度很大的特征,将特征切成几个区域,取其最大值或平均值,得到新的、维度较小的特征。
4.全连接层( Fully-Connected layer):
把所有局部特征结合变成全局特征,用来计算最后每一类的得分。
卷积层:
1.局部感知:
相当于看一副很大很大的图,你必须从图中一区域(感受野)开始挨个浏览(扫描),你就能知道这幅图到底是啥!
有啥好处,一下看很大的图–身心疲惫,而且还不一定能看懂
慢慢看,又优雅,又高尚,还能快速抓到要点(就像你看到有德玛西亚,你就可以知道跟lol有关)
2.权值共享(参数共享)
比说,刚花了一万的力气创造了猪八戒和孙悟空,猪八戒找的到吃的,孙悟空能打小怪兽,
后面我遇到小怪兽就不用创造悟空了,直接拿过来打小怪兽就可以了!
如果遇到肚子饿了,孙悟空就没用了,就可以用猪八戒找吃的!
所以参数共享能节省不必要的重复消耗,加快计算
池化层:
池化(pool)即下采样(downsamples),目的是为了减少特征图。池化操作对每个深度切片独立,规模一般为 2*2,相对于卷积层进行卷积运算,池化层进行的运算一般有以下几种:
- 最大池化(Max Pooling)。取4个点的最大值。这是最常用的池化方法。
- 均值池化(Mean Pooling)。取4个点的均值。
- 注:
池化操作将保存深度大小不变。
如果池化层的输入单元大小不是二的整数倍,
一般采取边缘补零(zero-padding)的方式补成2的倍数,然后再池化。
- 注:
全连接层:
全连接层 可相互转换 卷积层
常见卷积网络架构:
输入 -> [[卷积层(CONV) -> 激活层(RELU)] * N -> 池化层(POOL)] * M
-> [全连接(fc) -> 激活层(RELU)]* K -> 全连接(fc)
PyTorch:
网络架构:CNN.py文件:
1 | import torch.nn as nn |
训练架构:train.py文件
1 | #pytorch |
- 注:
- 数据集下载不下来,修改pytorch里面MNIST.py文件
- 效果如图: