Pytorch学习笔记
深度学习中的batch、epoch、iteration的含义
深度学习的优化算法,说白了就是梯度下降。每次的参数更新有两种方式。
第一种,遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度。这种方法每更新一次参数都要把数据集里的所有样本都看一遍,计算量开销大,计算速度慢,不支持在线学习,这称为Batch gradient descent,批梯度下降。
另一种,每看一个数据就算一下损失函数,然后求梯度更新参数,这个称为随机梯度下降,stochastic
gradient descent。这个方法速度比较快,但是收敛性能不太好,可能在最优点附近晃来晃去,hit不到最优点。两次参数的更新也有可能互相抵消掉,造成目标函数震荡的比较剧烈。
为了克服两种方法的缺点,现在一般采用的是一种折中手段,mini-batch
gradient decent,小批的梯度下降,这种方法把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为批的样本数与整个数据集相比小了很多,计算量也不是很大。
现在用的优化器SGD是stochastic
gradient descent的缩写,但不代表是一个样本就更新一回,还是基于mini-batch的。那 batch epoch iteration代表什么呢?
(1)batchsize:批大小。在深度学习中,一般采用SGD训练,即每次训练在训练集中取batchsize个样本训练;
(2)iteration:1个iteration等于使用batchsize个样本训练一次;
(3)epoch:1个epoch等于使用训练集中的全部样本训练一次,通俗的讲epoch的值就是整个数据集被轮几次。
比如训练集有500个样本,batchsize
= 10 ,那么训练完整个样本集:iteration=50,epoch=1.batch:
深度学习每一次参数的更新所需要损失函数并不是由一个数据获得的,而是由一组数据加权得到的,这一组数据的数量就是batchsize。batchsize最大是样本总数N,此时就是Full batch learning;最小是1,即每次只训练一个样本,这就是在线学习(Online Learning)。当我们分批学习时,每次使用过全部训练数据完成一次Forword运算以及一次BP运算,成为完成了一次epoch。
————————————————
版权声明:本文为CSDN博主「bboysky45」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_18668137/article/details/80883350
深度学习(深度神经网络)中最基本的三个概念:Epoch,
Batch, Iteration
mnist 数据集有 60000 张图片作为训练数据,10000 张图片作为测试数据。假设现在选择 Batch Size = 100 对模型进行训练。迭代30000次。
每个 Epoch 要训练的图片数量:60000(训练集上的所有图像)
训练集具有的 Batch 个数: 60000/100=600
每个 Epoch 需要完成的 Batch 个数: 600
每个 Epoch 具有的 Iteration 个数: 600(完成一个Batch训练,相当于参数迭代一次)
每个 Epoch 中发生模型权重更新的次数:600
训练 10 个Epoch后,模型权重更新的次数: 600*10=6000
不同Epoch的训练,其实用的是同一个训练集的数据。第1个Epoch和第10个Epoch虽然用的都是训练集的60000图片,但是对模型的权重更新值却是完全不同的。因为不同Epoch的模型处于代价函数空间上的不同位置,模型的训练代越靠后,越接近谷底,其代价越小。
总共完成30000次迭代,相当于完成了 30000/600=50 个Epoch
————————————————
版权声明:本文为CSDN博主「xytywh」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiaohuihui1994/article/details/80624593
MNIST数据集介绍及读取
损失函数
就是样本训练的误差
4.Pytorch基础教程
张量数据类型Tensor
Tensor接收数据维度,tensor直接接收数据
未初始化的tensor一定要跟后续的数据写入操作,否则会出现一系列问题,里面有一些奇怪的数据,一定要后覆盖掉
rand()会随机产生0~1之间的数值,不包括1
创建Tensor
索引与切片
维度变换
常用API:
转变shape:View/reshape
数据的存储/维度顺序非常重要,需要时刻记住
View会导致维度顺序关系变模糊,所以需要人为跟踪
挤压与增加维度:Squeeze/unsqueeze
单次矩阵转置/多次操作:Transpose/t/permute
维度扩展:Expand/repeat
- Pytorch进阶教程
Broadcasting
作用,扩展,不需要拷贝数据
什么时候使用?
合并与分割
Cat,拼接
Stack,拼接,会创建一个新的维度
Split,按长度进行拆分
Chunk,按数量进行拆分
数学运算
Add/minus/multiply/divide
Matul
Pow
Sqrt/rsqrt
Round
属性统计
Norm,范数
Mean
sum
Prod,累乘
Max,
min, argmin, argmax
Kthvalue, topk
高阶操作
Where
Gather
-
随机梯度下降
梯度是一个向量,是有方向的,所有偏微分的向量,一个函数有几个自变量就有几个偏微分。 偏微分的方向是指定的。 梯度 鞍点,影响效果,在一个维度上是极大值,在另一个维度上是极小值。 影响优化效果的三个因素 初始状态,initialization status, 从哪个点开始,可能导致不同的结果,局部极小值、全局极小值 学习率,learning rate 设置小一点,影响收敛速度和精度 动量,momentum(如何逃离局部极小值) 理解为惯性 常见函数的梯度 高等数学基本知识 激活函数及其梯度 Sigmoid/logistic,值域0到1 σ‘
= σ(1-σ)
缺陷,梯度离散问题
Tanh,
在RNN中用的较多,值域-1到1
Tanh(x)
= 2sigmoid(2x) – 1
Rectified
Linear Unit, ReLU,线性整流函数,又称修正线性单元,适合做深度学习
优势,梯度计算方便,解决了梯度离散,梯度爆炸问题
Loss及其梯度
均方差MSE, mear squared error,
Loss
= Σ ( y – y’ )2
可用norm,torch.norm( y – y’ ).pow(2)
Torch.autograd.grad(loss,
[w1,w2…])方法求梯度
Loss.backward()方法求梯度
Cross
entropy loss,
二分类,多分类,
Softmax函数
感知机的梯度推导
求导之前先向右计算一次所有的变量值,这就是前向传播
链式法则
反向传播算法
优化问题实战
2D函数优化实例
-
神经网络与全连接层
Logistic
regression
Recap
交叉熵
熵,理解为惊喜度,不确定性高
MSE
Cross
entropy loss
Hinge
loss
多分类问题实战
-
过拟合
过拟合与欠拟合 交叉验证 怎么检测过拟合——划分——train set, test set Kaggle——train test, val set(测试用), test set(客户用) K折交叉验证 Regularization(weight_decay) L1, L2 如何减轻过拟合 更多数据 降低模型复杂度 Dropout 数据增强,data argumentation Early
stopping
奥卡姆剃刀原理
动量与学习率衰减
动量,帮助跳出局部极小值
ReduceLROnPlateau(optimizer,
‘min’)
学习率衰减StepLR(optimizer, step_size = 30, gamma=0.1)
Early
Stop, dropout, stochastic gradient descent
Early
stop, 防止过拟合,test的acc开始下降之前停掉
Dropout
Torch.nn.Dropout(0.5),会断掉一半的神经元连接
Tensorflow和pytorch中参数是反的
-
卷积神经网络
什么是卷积 局部相关性,局部视觉,权值共享 卷积神经网络CNN 池化层与采样 Pooling Avg
pooling, max pooling,
Reduce
size
Upsample,
downsample
F.interpolate()
Relu
设置layer = nn.ReLU(inplace=True)可以减少内存使用,更新的x’ 会覆盖x的内存空间
BatchNorm
Feature
scaling
把数据搞到0-1的范围内
Image
Normalization
Batch
Normalization
Batch
Norm, Layer Norm, Instace Norm, Group Norm
使用BatchNorm的好处
收敛速度更快
Better
performance
更稳定,Robust
经典卷积网络
AlaxNet,
VGG, LeNet-5, GoogLeNet,
ResNet与DenseNet,深度残差网络
nn.Module模块
是一个基本的父类
提供了大量现成的模块
Container
nn.Sequential()
parameters
models
to(device),网络结构搬到cpu或者gpu上
save
and load
train/test
implement
own layer
own
linear layer
数据增强(小技巧)
关键是大量数据,避免过拟合;如何把有限的数据变多?(效果只会好一点点)
对原来的数据进行增强处理,变得更多
方法:
Flip,翻转
Rotate,旋转;Scale, 缩放
Random
move & crop ,随机移动,裁剪
GAN,
Noise,加噪声
-
CIFAR10与ResNet实战
-
循环神经网络RNN&LSTM
时间序列表示方法
梯度弥散与梯度爆炸
Gradient
clipping
Gradient
vanishing
LSTM,长短期记忆网络
三个门