当前位置: 首页 > news >正文

《Pytorch深度学习实践》ch2-梯度下降算法

                                                       ------B站《刘二大人》

1.Gradient Decent

  • 局部最优,全局最优,非凸函数:

  • 梯度下降算法公式:

2.Implementation

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# 损失函数
def cost(xs, ys):cost = 0for x, y in zip(xs, ys):y_pred = forward(x)cost += (y_pred - y) ** 2return cost / len(xs) # 梯度下降
def gradient(xs, ys):grad = 0for x, y in zip(xs, ys):y_pred = forward(x)grad += 2 * x * (y_pred - y)return grad / len(xs)# 训练轮数 epoch 为横坐标,损失 Cost 为纵坐标
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 为学习率epoch_list.append(epoch)cost_list.append(cost_val)print('Epoch:', epoch, 'w=', w, 'cost=', cost_val)print('Predict (after training)', 4, forward(4))# 绘图
plt.plot(epoch_list, cost_list)
plt.xlabel('epoch')
plt.ylabel('cost')
plt.grid()
plt.show
  • 迭代如下: 
  • 绘制图形如下:

3.Discussion

  • 如何让曲线变得更平滑:“加权”;
  • 如果曲线最终没有趋于收敛:常见原因是 a 太大 ;

4. Stochastic Gradient Decent

  • 相比于GD,SGD(随机梯度下降):每次随机选择一个样本,优势在于有可能跨过局部最优,并且曲线也更加平滑;

  • 代码修改如下:
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# 损失函数
def loss(x, y):y_pred = forward(x)return (y_pred - y) * (y_pred - y)# 梯度下降
def gradient(x, y):y_pred = forward(x)return 2 * x * (y_pred - y)# 训练轮数 epoch 为横坐标,损失 loss 为纵坐标
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):loss_val = loss(x , y)grad_val = gradient(x,y)w -= 0.01 * grad_val # 0.01 为学习率epoch_list.append(epoch)loss_list.append(loss_val)print('Epoch:', epoch, 'w=', w, 'loss=', loss_val)print('Predict (after training)', 4, forward(4))# 绘图
plt.plot(epoch_list, loss_list)
plt.xlabel('epoch')
plt.ylabel('loss')
plt.grid()
plt.show
  •  迭代如下: 

  • 绘制图形如下:

5.Comparison

  • 随机梯度算法虽然性能更好,但是时间复杂度高,于是取折中:Batch;

相关文章:

  • 怎么样提高研发质量?
  • 小白的进阶之路系列之九----人工智能从初步到精通pytorch综合运用的讲解第二部分
  • 多线程——定时任务ScheduledThreadPoolExecutor用法
  • [AD] CrownJewel-1 Logon 4799+vss-ShadowCopy+NTDS.dit/SYSTEM+$MFT
  • C++实现伽罗华域生成及四则运算(三)
  • AAA基础配置
  • Cypress + TypeScript + Vue3
  • CppCon 2014 学习: C++ on Mars
  • c++学习之---模版
  • CP4-OFDM模糊函数原理及仿真
  • day43 python Grad-CAM
  • 路由策略与路由控制
  • Global Security Markets 第5章知识点总结
  • 设计模式——策略设计模式(行为型)
  • 系统架构设计师(一):计算机系统基础知识
  • yolo目标检测助手:具有模型预测、图像标注功能
  • Day 36训练
  • Roller: 抽奖系统测试的幕后剧本-测试报告
  • 深度优先搜索(DFS)邻接矩阵实现
  • Vue单文件组件
  • 采集发布wordpress/seo排名赚app最新版本
  • 现在给别人做网站还赚钱吗/产品如何做网络推广
  • 国外做的好看的网站设计/百度最新秒收录方法2021
  • java 做网站/抖音seo排名
  • 做网站除了买域名还有什么/注册网站需要多少钱?
  • 中企动力网站/市场调研报告500字