【pytorch深度学习实践】笔记—03-1.梯度下降算法

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【pytorch深度学习实践】笔记—03-1.梯度下降算法

梯度的引入与思考

【问题1】为什么要引入梯度下降,梯度下降是用来解决什么问题的?

【思考】回忆一下在笔记02中我们是如何找到的w?对,是穷举!

我们是在[0.0,4.0]区间,每隔0.1取一个值,穷举了所有w的可能取值,根据w-loss图像得出结论:loss最小时,w=2。

18a5c1f4d35d3bf143bdf48854ec4c08_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzM4MDY4ODc2,size_16,color_FFFFFF,t_70#pic_center.png

在实际情况中,一方面我们很可能一开始就无法确定w的大致范围,进而导致没办法穷举w的值。另一方面,权重W也可能是多维的,一一穷举会很麻烦。所以我们就希望,可不可以让程序自己来寻找最合适的w值。


此时,就把求w值问题变成一个如何寻找w最小值问题。


【问题2】如何寻找最小w?

【思考】可通过下列步骤寻找w最小值:

①初始化w:先假定w取一个值,作为寻找的起始点。

②判断方向:根据梯度值,判断w应该往左走还是往右走可以找到w最小值(沿着梯度反方向,即为寻找最小值的方向)。

移动:移动的过程就是更新权重w的过程,每次朝着梯度反方向③小幅度移动。

④更新权重w:移动完成后,将当前w值作为最新权重值,更新公式如下图所示:

1.png


不断重复上述操作,当w快找到最小值点时,此时w-loss图像的梯度接近0(可以理解为曲线在接近w最小值点斜率接近0),此时cost对w的导数接近为0,在公式中w=w-α×0。此时得到的w即为所求的w。


【概念】梯度方向定义:函数上升的方向即为梯度的方向。

所以,梯度的反方向即为函数下降的方向(即:寻找LOSS最小值点的方向)


梯度下降寻找权重w最小值

1.导入数据集

PS:与之前代码相同

import matplotlib.pyplot as plt
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]

2.定义模型

PS:与之前代码相同

def forward(x):
    return x * w

3.定义损失函数

PS:与之前代码相同

# 定义损失函数MSE
# loss = (y_pred - y)²
# loss_sum = += loss (对每个x=1.0,2.0,3.0,求loss后求和)
# loss_sum / len(xs) 在对cost求均值
def cost(xs, ys):
    loss_sum = 0
    for x, y in zip(xs, ys):
        y_pred = forward(x)  # 计算预测值y
        loss_sum += (y_pred - y) ** 2
        return loss_sum / len(xs)


4.定义梯度算法

y_pred预测值公式如下:

1.png

cost(w)损失函数公式如下:

1.png

gradient梯度公式如下:

1.png


gradient梯度关于权重w、初始值Xn和Yn的公式如下(由上述公式根据复合函数求导法则推导而来):

1.png


# 定义梯度计算方法 求cost(w)对w的偏导数 梯度也需要求和后求均值
def gradient(xs, ys):
    grad = 0
    for x, y in zip(xs, ys):
        grad += 2 * x * (x * w - y)
    return grad / len(xs)

5.训练模型

for epoch in range(100):  # 默认步长为1,epoch从0-99训练100次
    cost_val = cost(x_data, y_data)  # 计算均方损失MSE
    grad_val = gradient(x_data, y_data)  # 计算梯度
    w -= 0.01 * grad_val  # 学习率lr等于0.01  # 使用梯度下降的方法更新权重
    print(' Epoch:', epoch, ' w=', w, ' loss=', cost_val)  # 每训练一次,打印一下权重w和损失loss的值

6.全部代码

import matplotlib.pyplot as plt
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
# 定义的初始权重值
w = 1.0
# 定义模型y=wx
def forward(x):
    return x * w
# 定义损失函数MSE
# loss = (y_pred - y)²
# loss_sum = += loss (对每个x=1.0,2.0,3.0,求loss后求和)
# loss_sum / len(xs) 在对cost求均值
def cost(xs, ys):
    loss_sum = 0
    for x, y in zip(xs, ys):
        y_pred = forward(x)  # 计算预测值y
        loss_sum += (y_pred - y) ** 2
        return loss_sum / len(xs)
# 定义梯度计算方法 求cost(w)对w的偏导数 梯度也需要求和后求均值
def gradient(xs, ys):
    grad = 0
    for x, y in zip(xs, ys):
        grad += 2 * x * (x * w - y)
    return grad / len(xs)
# 最终绘制图像的x
epoch_list = []
cost_list = []
print('Predict (before training)', 4, forward(4))
for epoch in range(100):  # 默认步长为1,epoch从0-99训练100次
    cost_val = cost(x_data, y_data)  # 计算均方损失MSE
    grad_val = gradient(x_data, y_data)  # 计算梯度
    w -= 0.01 * grad_val  # 学习率lr等于0.01  # 使用梯度下降的方法更新权重
    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()


7.展示pytorch绘制的图像(epoch-loss)

从图中可以发现,当训练epoch次数增加的时候,损失值会越来越小。

此时打印4 和forward(4),就会得到forward(4)的值接近于8。所以权重w=y/x=2

1.png

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
1月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
130 5
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
2月前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
347 55
|
13天前
|
机器学习/深度学习 数据可视化 算法
PyTorch生态系统中的连续深度学习:使用Torchdyn实现连续时间神经网络
神经常微分方程(Neural ODEs)是深度学习领域的创新模型,将神经网络的离散变换扩展为连续时间动力系统。本文基于Torchdyn库介绍Neural ODE的实现与训练方法,涵盖数据集构建、模型构建、基于PyTorch Lightning的训练及实验结果可视化等内容。Torchdyn支持多种数值求解算法和高级特性,适用于生成模型、时间序列分析等领域。
156 77
PyTorch生态系统中的连续深度学习:使用Torchdyn实现连续时间神经网络
|
2月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
220 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
1月前
|
机器学习/深度学习 数据可视化 PyTorch
PyTorch FlexAttention技术实践:基于BlockMask实现因果注意力与变长序列处理
本文介绍了如何使用PyTorch 2.5及以上版本中的FlexAttention和BlockMask功能,实现因果注意力机制与填充输入的处理。通过attention-gym仓库安装相关工具,并详细展示了MultiheadFlexAttention类的实现,包括前向传播函数、因果掩码和填充掩码的生成方法。实验设置部分演示了如何组合这两种掩码并应用于多头注意力模块,最终通过可视化工具验证了实现的正确性。该方法适用于处理变长序列和屏蔽未来信息的任务。
82 17
|
2月前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如"How are you"、"I am fine"、"I love you"等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。
|
2月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于深度学习网络的宝石类型识别算法matlab仿真
本项目利用GoogLeNet深度学习网络进行宝石类型识别,实验包括收集多类宝石图像数据集并按7:1:2比例划分。使用Matlab2022a实现算法,提供含中文注释的完整代码及操作视频。GoogLeNet通过其独特的Inception模块,结合数据增强、学习率调整和正则化等优化手段,有效提升了宝石识别的准确性和效率。
|
3月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
136 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
3月前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
179 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
3月前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
171 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型