memory的更新方式
How to train?
求导过程略
RNN循环神经网络
RNN跟CNN最大的区别是会根据语境信息更新
时间序列表示方法
pytorch里面并没有支持字符串的功能
one_hot是比较稀疏的、维度高
sequence序列能接受的input shape有两种
[word num, b, word vec]
[b, word num, word vec]
CIFAR—10数据集包括了常见的十类事物的图片
每一类有6000张图片,一共有6万张,其中5万张用来训练,1万张用来测试
数据增强
神经网络对数据的要求非常饥渴,需要贴有标签的大量数据
当数据量有限的时候:1、要减少神经网络的隐藏层;2、Regularization,迫使一部分权值接近于0,让网络的表现更加稳定;3、数据增强,目前的数据量较少,想办法对数据进行变换——旋转、裁剪加噪声等
Flip——翻转
可以从水平方向和竖直方向进行翻转,这里增加了random属性,代表翻转是具有随机性的,有可能进行水平翻转,也有可能不翻转,有可能垂直翻转,也有可能不翻转
Rotate——旋转
Scale——缩放
以中心点为标准进行缩放Resize,传入的是list
Crop Part
随机得进行裁剪
transform是torchvision里面自带的包, transform.Compose()可以把一系列翻转、旋转、裁剪和缩放操作组合在一起
Noise——加噪声,用的不多
即使得到了无穷多的数据,由于进行变换后的数据和原本的数据非常接近,所以训练的结果仅仅能得到一个很小的提升
4、save和load
5、train和test状态切换很方便
6、implement own layer
由于实际需要定义一个flatten类,我们通过nn.Sequential()来把函数有序排列起来组成我们主要的神经网络结构
7、通过nn.Parameter( )实现自己的参数定义
nn.Module的好处
提供了很多现成的网络层
1、container——nn.Sequential()
将神经网络内部的结构按照顺序进行编码
net = nn.Sequential()可以直接实现网络前向传播
2、其次,通过net.parameters( )可以返回想要的参数;也可以通过net.parameters( )把参数丢到优化器里
3、modules里面包括了所有的节点;里面包括很多子节点——直系亲属
整个net有5个节点
DenseNet跟ResNet一样都有shortcut短接,以使得及时是很深的网络其性能也不必浅层的网络差,不一样的是后面的每一层网络都有可能与前面任意一层网络形成短接
最上面的没有短接的神经网络
第二个是Resnet
最后一个是DenseNet
从图片上可以看出来区别
VGG
研究发现卷积核较小的时候不仅可以提高运算量,且对图片benshen
GoogLeNet
在每个隐藏层都使用了不同大小的卷积核,从不同的视觉大小更深刻得学习图片
leNet-5将准确率提升了10%+
AlexNet使用了下采样层和relu激活函数
Batch Norm有以下四种,只是以哪个维度为标准的区别
我们主要学习Batch normalization以通道为基准,计算每个通道上的均值和方差,然后通过减均值除以方法来使这些值均匀得分布在某个范围内
规范化算法 计算均值和方差、标准化、 缩放
在测试集上,我们把训练集的runnnig_mean/running_var直接赋值给训练集,test没有backward,所有w和b并不需要更新,不需要梯度更新
BatchNorm
将不同维度的值都缩放到一个以0为均值,以某个值为方差的比较均匀的分布上
Feature scaling
输入R、G、B各通道的均值和方差,normaliazation的具体过程是
池化层(pooling)
向下采样:
Max pooling
采集的是窗口内的最大值
Avg pooling
采集的是窗口数值的均值
向上取样,把图片方法,取最近距离的值进行简单的复制
Multi-Kernels
每一个通道上都需要有相同的卷积核,每个通道可以有1个2个甚至更多的卷积核,但是每个通道上的卷积核都必须相同!每个核之间可以不同
概念:
Input_channels输入的通道(黑白图有1个通道,彩图RGB有三个通道)
Kernel_channels有多少个核(边缘核、模糊核都有就是两个核)
Kernel_size核的大小,2x2,或者是3x3
stride:步长
Padding(打补丁):在两边补空白的数量,2列是2,1行是1
卷积原理:
神经网络里的卷积是离散数值,是小窗口的矩阵相乘相加操作
卷积神经网络中f(x,y)里面的x和y分别是距离坐标原点的距离(偏置)
时间复杂度
二分对象 有序
时间复杂度
Early Stopping
我们要在过拟合之前停止
1、设置val set
2、监听在各个参数值下的val set的表现
3、在val 表现最好的时候停止——一定程度上需要有经验
Dropout——防止过拟合的一种方法
减少了隐藏层之间的神经元的连接量,Learning less to learn more,会使得曲线较为平缓且泛化
代码实现
需要特别说明的是
在torch里面,p代表的是断掉的概率,在tensorflow里面p代表的是保持连接的概率。
此外,我们约定了在test中,需要全部连接神经,需要手动切断dropout
关键的一句是:net_dropeed.eval( )
Stochastic Gradient Descent并不是完全随机的,而是符合某一个分布的
从train set里面抽取出来一个batch比如16、32、64、128等,计算其所有在某个x上的梯度求和再平均得到梯度值。优点:节约显存