【pytorch深度学习实践】笔记—04.反向传播

简介: 【pytorch深度学习实践】笔记—04.反向传播

问题与思考

【问题】什么是反向传播?用于解决什么问题?

【回答】我们从头屡一下思路。为了找到权重w的值,我们一开始选择暴力枚举;后来通过梯度下降+更新权重的方案让程序自动找到合适的w值;但是在求梯度的时候,w可能会很复杂(比如是多维的)那此时如果在使用loss对w求导来求梯度就变得很麻烦(需要逐个求偏导数,在复杂神经网络中会相当复杂)。所以引入“反向传播”这个概念,生成一个计算图,“倒着”来,根据链式法则来求loss对w的偏导数(梯度),如下图所示:

75c5967cfca3a61585673f28c05fe50e_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzM4MDY4ODc2,size_16,color_FFFFFF,t_70#pic_center.png

蓝色线:正向过程(前馈),红色线:反向过程(反馈)。


正向过程,求出z对x的偏导数,求出z对w的偏导数。

反向过程,根据链式法则(此处假设L对z的偏导数的值为5),可以得到L(loss)对w和l对x的偏导数。

【注】只要拿到l对w的偏导数(梯度),就可以做更新了。


完整的线性模型计算图如下:

正向计算,一步一步计算往后走,直到获取loss的值。

得到loss值后反向计算,一步一步根据链式法则求梯度(loss对w的偏导数)

0c2b49355fb273e2fef5427e060e9df9_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzM4MDY4ODc2,size_16,color_FFFFFF,t_70#pic_center.png


用pytorch实现反向传播

import torch
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
# 定义w初始值
w = torch.tensor([1.0])
w.requires_grad = True  # True代表需要计算梯度,tensor会自动求梯度的。
# 定义模型
def forward(x):
    return x * w  # x是个张量、w是个张量, x和w进行矩阵乘法
# 定义loss损失
def loss(x, y):
    y_pred = forward(x)  # 计算y_pred预测值
    return (y_pred - y) ** 2
# 开始训练前,因为定义了初始w值,把x=4带入y=wx得到初始的预测值y_pred=4
print("predict before traning", 4, forward(4).item())
# 训练过程
for epoch in range(100):  # 训练100次
    for x, y in zip(x_data, y_data):
        l = loss(x, y)  # 前馈过程,计算loss损失
        l.backward()  # 反向过程,计算梯度
        print("\t grad:", x, y, w.grad.item())
        w.data = w.data - 0.01 * w.grad.data  # 更新梯度 w= w - α * 梯度
        w.grad.data.zero_()  # 梯度清零
    print("progress:", epoch, l.item())
# 训练结束,测试数据,将x=4带入得到forward(4)的值 接近8
print("predict after training", 4, forward(4).item())
目录
相关文章
|
11天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN): 从理论到实践
本文将深入浅出地介绍卷积神经网络(CNN)的工作原理,并带领读者通过一个简单的图像分类项目,实现从理论到代码的转变。我们将探索CNN如何识别和处理图像数据,并通过实例展示如何训练一个有效的CNN模型。无论你是深度学习领域的新手还是希望扩展你的技术栈,这篇文章都将为你提供宝贵的知识和技能。
20 7
|
15天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络:从理论到实践
【10月更文挑战第35天】在人工智能的浪潮中,深度学习技术以其强大的数据处理能力成为科技界的宠儿。其中,卷积神经网络(CNN)作为深度学习的一个重要分支,在图像识别和视频分析等领域展现出了惊人的潜力。本文将深入浅出地介绍CNN的工作原理,并结合实际代码示例,带领读者从零开始构建一个简单的CNN模型,探索其在图像分类任务中的应用。通过本文,读者不仅能够理解CNN背后的数学原理,还能学会如何利用现代深度学习框架实现自己的CNN模型。
|
12天前
|
机器学习/深度学习 数据采集 自然语言处理
深入浅出深度学习:从理论到实践
【10月更文挑战第38天】本文旨在通过浅显易懂的语言和直观的代码示例,带领读者探索深度学习的奥秘。我们将从深度学习的基本概念出发,逐步深入到模型构建、训练以及应用实例,让初学者也能轻松入门。文章不仅介绍了深度学习的原理,还提供了实战操作指南,帮助读者在实践中加深理解。无论你是编程新手还是有一定基础的学习者,都能在这篇文章中找到有价值的内容。让我们一起开启深度学习之旅吧!
|
1月前
|
机器学习/深度学习 调度 计算机视觉
深度学习中的学习率调度:循环学习率、SGDR、1cycle 等方法介绍及实践策略研究
本文探讨了多种学习率调度策略在神经网络训练中的应用,强调了选择合适学习率的重要性。文章介绍了阶梯式衰减、余弦退火、循环学习率等策略,并分析了它们在不同实验设置下的表现。研究表明,循环学习率和SGDR等策略在提高模型性能和加快训练速度方面表现出色,而REX调度则在不同预算条件下表现稳定。这些策略为深度学习实践者提供了实用的指导。
36 2
深度学习中的学习率调度:循环学习率、SGDR、1cycle 等方法介绍及实践策略研究
|
14天前
|
机器学习/深度学习 自然语言处理 语音技术
深度学习的奇妙之旅:从理论到实践
【10月更文挑战第36天】在本文中,我们将一起探索深度学习的神秘世界。我们将首先了解深度学习的基本概念和原理,然后通过一个简单的Python代码示例,学习如何使用深度学习库Keras进行图像分类。无论你是深度学习的初学者,还是有一定基础的学习者,都可以从这篇文章中获得新的知识和启示。
|
19天前
|
机器学习/深度学习 监控 PyTorch
深度学习工程实践:PyTorch Lightning与Ignite框架的技术特性对比分析
在深度学习框架的选择上,PyTorch Lightning和Ignite代表了两种不同的技术路线。本文将从技术实现的角度,深入分析这两个框架在实际应用中的差异,为开发者提供客观的技术参考。
36 7
|
27天前
|
机器学习/深度学习 数据采集 人工智能
深度学习的魔法:从理论到实践的探索####
【10月更文挑战第22天】 本文深入探讨了深度学习这一现代人工智能领域的璀璨明珠,通过生动实例与通俗语言,揭示了其背后的原理、发展历程及在多个行业的应用潜力。文章首先概述了深度学习的基本概念,随后详细解析了神经网络的核心构成,并探讨了当前面临的挑战与未来趋势。最终,通过实际案例展示了深度学习如何改变世界,为读者呈现一幅技术革新引领未来的画卷。 ####
26 3
|
21天前
|
机器学习/深度学习 自动驾驶 大数据
深入探索深度学习:理论与实践
【10月更文挑战第29天】本文将深入探讨深度学习的理论与实践,包括其基本概念、发展历程、关键技术以及应用场景。我们将从浅入深,逐步解析深度学习的内在机制,并通过实例展示其在实际应用中的强大能力。无论你是深度学习的初学者,还是已经在该领域有所建树的研究者,都能在本文中找到有价值的信息。让我们一起踏上深度学习的探索之旅吧!
|
1月前
|
算法 PyTorch 算法框架/工具
Pytorch学习笔记(九):Pytorch模型的FLOPs、模型参数量等信息输出(torchstat、thop、ptflops、torchsummary)
本文介绍了如何使用torchstat、thop、ptflops和torchsummary等工具来计算Pytorch模型的FLOPs、模型参数量等信息。
223 2
下一篇
无影云桌面