Pytorch学习笔记

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数据集介绍及读取
Pytorch学习笔记_第1张图片

损失函数

   就是样本训练的误差

Pytorch学习笔记_第2张图片

4.Pytorch基础教程

张量数据类型Tensor

Tensor接收数据维度,tensor直接接收数据

未初始化的tensor一定要跟后续的数据写入操作,否则会出现一系列问题,里面有一些奇怪的数据,一定要后覆盖掉

rand()会随机产生0~1之间的数值,不包括1

创建Tensor

索引与切片

维度变换

常用API:

转变shape:View/reshape

   数据的存储/维度顺序非常重要,需要时刻记住

View会导致维度顺序关系变模糊,所以需要人为跟踪

挤压与增加维度:Squeeze/unsqueeze

单次矩阵转置/多次操作:Transpose/t/permute

维度扩展:Expand/repeat

  1. 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
  1. 随机梯度下降

    梯度是一个向量,是有方向的,所有偏微分的向量,一个函数有几个自变量就有几个偏微分。
    
    偏微分的方向是指定的。
    
    梯度
    
    鞍点,影响效果,在一个维度上是极大值,在另一个维度上是极小值。
    
    
    
    影响优化效果的三个因素
    
           初始状态,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函数优化实例
  1. 神经网络与全连接层

    Logistic
    

regression

          Recap



   交叉熵

          熵,理解为惊喜度,不确定性高

          MSE

          Cross

entropy loss

          Hinge

loss

   多分类问题实战
  1. 过拟合

    过拟合与欠拟合
    
    
    
    交叉验证
    
           怎么检测过拟合——划分——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中参数是反的
  1. 卷积神经网络

    什么是卷积
    
           局部相关性,局部视觉,权值共享
    
    
    
    卷积神经网络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,加噪声
  1. CIFAR10与ResNet实战

  2. 循环神经网络RNN&LSTM

    时间序列表示方法

    梯度弥散与梯度爆炸

          Gradient
    

clipping

          Gradient

vanishing

   LSTM,长短期记忆网络

          三个门

你可能感兴趣的:(python学习)