首页 > 其他分享 >刘老师《Pytorch深度学习实践》第三讲:梯度下降

刘老师《Pytorch深度学习实践》第三讲:梯度下降

时间:2023-10-31 09:55:24浏览次数:92  
标签:plt 梯度 list epoch 刘老师 Pytorch cost data

1.分治法不能用

局部点干扰性大

2.梯度下降

3. 随机梯度下降

随机梯度下降法(Stochastic Gradient Descent, SGD):由于批量梯度下降法在更新每一个参数时,都需要所有的训练样本,所以训练过程会随着样本数量的加大而变得异常的缓慢。随机梯度下降法正是为了解决批量梯度下降法这一弊端而提出的。随机梯度下降是通过每个样本来迭代更新一次。SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着最优化方向进行。

4.Batch

批量梯度下降法(Batch Gradient Descent, BGD):是梯度下降法的最原始形式,每迭代一步或更新每一参数时,都要用到训练集中的所有样本数据,当样本数目很多时,训练过程会很慢。
小批量梯度下降(Mini-batch Gradient Descent,MBGD)
大多数用于深度学习的梯度下降算法介于以上两者之间,使用一个以上而又不是全部的训练样本。传统上,这些会被称为小批量(mini-batch)或小批量随机(mini-batch stochastic)方法,现在通常将它们简单地成为随机(stochastic)方法。对于深度学习模型而言,人们所说的“随机梯度下降, SGD”,其实就是基于小批量(mini-batch)的随机梯度下降。

5.鞍点

  • 鞍点的定义

    在学习最优化课程时,不时听到“鞍点”这个名词。老师很快提了这个词,但没有详细介绍鞍点的含义。
    鞍点 (saddle point)的数学含义是: 目标函数在此点上的梯度(一阶导数)值为 0, 但从该点出发的一个方向是函数的极大值点,而在另一个方向是函数的极小值点。
    判断鞍点的一个充分条件是:函数在一阶导数为零处(驻点)的黑塞矩阵为不定矩阵。
    半正定矩阵: 所有特征值为非负,或主子式全部非负。
    半负定矩阵:所有特征值为非正,或主子式负正相间。
    不定矩阵:特征值有正有负,或主子式不满足上面的两种情况。

6.代码

import matplotlib.pyplot as plt
 
# prepare the training set
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
 
# initial guess of weight 
w = 1.0
 
# define the model linear model y = w*x
def forward(x):
    return x*w
 
#define the cost function MSE 
def cost(xs, ys):
    cost = 0
    for x, y in zip(xs,ys):
        y_pred = forward(x)
        cost += (y_pred - y)**2
    return cost / len(xs)
 
# define the gradient function  gd
def gradient(xs,ys):
    grad = 0
    for x, y in zip(xs,ys):
        grad += 2*x*(x*w - y)
    return grad / len(xs)
 
epoch_list = []
cost_list = []
print('predict (before training)', 4, forward(4))
for epoch in range(100):
    cost_val = cost(x_data, y_data)
    grad_val = gradient(x_data, y_data)
    w-= 0.01 * grad_val  # 0.01 learning rate
    print('epoch:', epoch, 'w=', w, 'loss=', cost_val)
    epoch_list.append(epoch)
    cost_list.append(cost_val)
 
print('predict (after training)', 4, forward(4))
plt.plot(epoch_list,cost_list)
plt.ylabel('cost')
plt.xlabel('epoch')
plt.show() 

附图:


随机梯度下降算法

import matplotlib.pyplot as plt

x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]

w = 1.0

def forward(x):
    return x * w

# calculate loss function
def loss(x, y):
    y_pred = forward(x)
    return (y_pred - y) ** 2

# define the gradient function  sgd
def gradient(x, y):
    return 2 * x * (x * w - y)
epoch_list = []
loss_list = []

print('predict (before training)', 4, forward(4))

for epoch in range(100):
    for x, y in zip(x_data, y_data):
        grad = gradient(x, y)
        w = w - 0.01 * grad  # update weight by every grad of sample of training set
        print("\tgrad:", x, y, grad)
        l = loss(x, y)
    print("progress:", epoch, "w=", w, "loss=", l)
    epoch_list.append(epoch)
    loss_list.append(l)

print('predict (after training)', 4, forward(4))
plt.plot(epoch_list, loss_list)
plt.ylabel('loss')
plt.xlabel('epoch')
plt.show()

标签:plt,梯度,list,epoch,刘老师,Pytorch,cost,data
From: https://www.cnblogs.com/xia19/p/17799597.html

相关文章

  • 形态学操作--4.梯度运算
    ......
  • pytorch深度学习入门
    参考:1、Pytorch最全入门介绍,Pytorch入门看这一篇就够了2、torch.nn模块torch.nn模块是PyTorch中用于构建神经网络的核心模块,包含了各种不同类型的层(如全连接层、卷积层、池化层)、损失函数、优化器等。下面介绍torch.nn中常用的一些类和函数:nn.module:所有神经网络层的基类,定义了......
  • ResNet详解:网络结构解读与PyTorch实现教程
    本文深入探讨了深度残差网络(ResNet)的核心概念和架构组成。我们从深度学习和梯度消失问题入手,逐一解析了残差块、初始卷积层、残差块组、全局平均池化和全连接层的作用和优点。文章还包含使用PyTorch构建和训练ResNet模型的实战部分,带有详细的代码和解释。关注TechLead,分享AI与......
  • ResNet详解:网络结构解读与PyTorch实现教程
    本文深入探讨了深度残差网络(ResNet)的核心概念和架构组成。我们从深度学习和梯度消失问题入手,逐一解析了残差块、初始卷积层、残差块组、全局平均池化和全连接层的作用和优点。文章还包含使用PyTorch构建和训练ResNet模型的实战部分,带有详细的代码和解释。关注TechLead,分享AI与......
  • pytorch:1.12-gpu-py39-cu113-ubuntu20.04
    docker-compose安装unbuntu20.04version:'3'services:ubuntu2004:image:ubuntu:20.04ports:-'2256:22'-'3356:3306'-'8058:80'volumes:-my-volume:/datacommand:tail......
  • anaconda+pytorch+pycharm
    1、安装anaconda,使用conda新建虚拟环境condacreate-npytorchpython=3.9numpymatplotlibpandasjupyternotebook(环境名为pytorch)condaactivatepytorchcondadeactivate2、在新建的虚拟环境下面下载pytorchcondainstallpytorchtorchvisiontorchaudio-cpytorch......
  • pytorch(11.2) Transformer 代码
         ......
  • 一文搞懂深度信念网络!DBN概念介绍与Pytorch实战
    本文深入探讨了深度信念网络DBN的核心概念、结构、Pytorch实战,分析其在深度学习网络中的定位、潜力与应用场景。关注TechLead,分享AI与云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资......
  • 解密长短时记忆网络(LSTM):从理论到PyTorch实战演示
    本文深入探讨了长短时记忆网络(LSTM)的核心概念、结构与数学原理,对LSTM与GRU的差异进行了对比,并通过逻辑分析阐述了LSTM的工作原理。文章还详细演示了如何使用PyTorch构建和训练LSTM模型,并突出了LSTM在实际应用中的优势。关注TechLead,分享AI与云服务技术的全维度知识。作者拥有1......
  • 《动手学深度学习 Pytorch版》 10.6 自注意力和位置编码
    在注意力机制中,每个查询都会关注所有的键-值对并生成一个注意力输出。由于查询、键和值来自同一组输入,因此被称为自注意力(self-attention),也被称为内部注意力(intra-attention)。本节将使用自注意力进行序列编码,以及使用序列的顺序作为补充信息。importmathimporttorchfromtorc......