深度学习之反向传播

这篇具有很好参考价值的文章主要介绍了深度学习之反向传播。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

(在pytorch包中)Tensor数据成员:data(存放数据w,也是Tensor变量,但是取data不会构建计算图)和grad(存放梯度loss对w的导,调用bacward之后grad也是个Tensor,每次引用结束要zero)

backward会释放计算图,每一次运行神经网络时计算图可能是不同的,所以没进行一次反向传播就释放计算图

exercise:

# -*- coding: utf-8 -*-
# @Time    : 2023-07-11 23:01
# @Author  : yuer
# @FileName: exercise04.py
# @Software: PyCharm
import torch

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

# w是一个包含data和grad的张量
w = torch.Tensor([1.0])
w.requires_grad = True


def forward(x):
    return x * w


# 数乘,将x强制类型转换为Tensor
# data和grad都是Tensor,但是取tensor中的data是不会构建计算图的。

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


print("predict (before training)", 4, forward(4).item())
for epoch in range(100):
    for x, y in zip(x_data, y_data):
        l = loss(x, y)
        # 是包含w的计算,也是Tensor变量
        l.backward()
        # l.backward()会把计算图中所有需要梯度(grad)的地方都会求出来,然后把梯度都存在对应的待求的参数中,最终计算图被释放。
        # 调用该方法后w.grad由None更新为Tensor类型,并释放计算图
        print('\tgrad:', x, y, w.grad.item())
        # item是标量,用于输出此数据
        w.data = w.data - 0.01 * w.grad.data
        # w中data与grad都为Tensor变量
        w.grad.data.zero_()
        # 每次反向传播(grad中)的数据要清零,否则梯度值是每次计算相加的总额
    print('progress:', epoch, l.item())

print("predict (after training)", 4, forward(4).item())

homework:文章来源地址https://www.toymoban.com/news/detail-563895.html

# -*- coding: utf-8 -*-
# @Time    : 2023-07-12 10:50
# @Author  : yuer
# @FileName: homework04.py
# @Software: PyCharm
import torch

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

w1 = torch.Tensor([1.0])
w1.requires_grad = True

w2 = torch.Tensor([1.0])
w2.requires_grad = True

b = torch.Tensor([1.0])
b.requires_grad = True


def forward(x):
    return w1 * x * x + w2 * x + b


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


for epoch in range(100):
    for x, y in zip(x_data, y_data):
        l = loss(x, y)
        l.backward()
        print('\tgrad:', x, y, w1.grad.item(), w2.grad.item(), b.grad.item())
        w1.data = w1.data - 0.01 * w1.grad.data
        w2.data = w2.data - 0.01 * w2.grad.data
        b.data = b.data - 0.01 * b.grad.data
        w1.grad.data.zero_()
        w2.grad.data.zero_()
        b.grad.data.zero_()
    print('progress:', epoch, l.item())
print("predict (after training)", 4, forward(4).item())

到了这里,关于深度学习之反向传播的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Pytorch深度学习笔记(五)反向传播算法

    目录 1.为什么要使用反向传播算法 2.二层神经网络 3.反向传播算法更新权值的过程 4.张量Tensor 推荐课程:04.反向传播_哔哩哔哩_bilibili 1.为什么要使用反向传播算法 简单模型可以使用解析式更新w 复杂模型,如图,输入矩阵为5*1矩阵,等一层权重矩阵H1为6*5矩阵,则需要30个解

    2023年04月22日
    浏览(36)
  • 深度学习 | 前馈神经网络与反向传播算法

    目录 一、Logistic函数 二、前馈神经网络(FNN) 三、反向传播算法(BP算法) ​四、基于前馈神经网络的手写体数字识别 Logistic函数是学习前馈神经网络的基础。所以在介绍前馈神经网络之前,我们首先来看一看Logistic函数。 Logistic函数定义为: Logistic函数可以看成是一个“挤

    2024年02月04日
    浏览(48)
  • 《动手学深度学习 Pytorch版》 8.7 通过时间反向传播

    本节主要探讨梯度相关问题,因此对模型及其表达式进行了简化,进行如下表示: h t = f ( x t , h t − 1 , w h ) o t = g ( h t , w o ) begin{align} h_t=f(x_t,h_{t-1},w_h)\\\\ o_t=g(h_t,w_o) end{align} h t ​ o t ​ ​ = f ( x t ​ , h t − 1 ​ , w h ​ ) = g ( h t ​ , w o ​ ) ​ ​ 参数字典: t t t 表示时间步

    2024年02月07日
    浏览(43)
  • AIGC实战——深度学习 (Deep Learning, DL)

    深度学习 ( Deep Learning , DL ) 是贯穿所有生成模型 ( Generative Model ) 的共同特征,几乎所有复杂的生成模型都以深度神经网络为核心,深度神经网络能够学习数据结构中的复杂关系,而不需要预先提取数据特征。在本节中,我们将介绍深度学习基本概念,并利用 Keras 构建深度神

    2024年02月08日
    浏览(43)
  • 可信深度学习Trustworthy Deep Learning相关论文

    Survey An Overview of Catastrophic AI Risks. [paper] Connecting the Dots in Trustworthy Artificial Intelligence: From AI Principles, Ethics, and Key Requirements to Responsible AI Systems and Regulation. [paper] A Survey of Trustworthy Federated Learning with Perspectives on Security, Robustness, and Privacy. [paper] Adversarial Machine Learning: A Systemati

    2024年02月13日
    浏览(40)
  • 【深度学习基础】反向传播BP算法原理详解及实战演示(附源码)

    需要源码请点赞关注收藏后评论区留言私信~~~ 神经网络的设计灵感来源于生物学上的神经网络。如图所示,每个节点就是一个神经元,神经元与神经元之间的连线表示信息传递的方向。Layer 1表示输入层,Layer 2、Layer 3表示隐藏层,Layer 4表示输出层。我们希望通过神经网络,

    2024年01月21日
    浏览(40)
  • 人工智能-深度学习之延后初始化

    到目前为止,我们忽略了建立网络时需要做的以下这些事情: 我们定义了网络架构,但没有指定输入维度。 我们添加层时没有指定前一层的输出维度。 我们在初始化参数时,甚至没有足够的信息来确定模型应该包含多少参数。 有些读者可能会对我们的代码能运行感到惊讶。

    2024年02月05日
    浏览(39)
  • 【深度学习】4-2 误差反向传播法 - 简单层的实现(层的介绍)

    下面把构建神经网络的“层”实现为一个类。这里所说的“层”是神经网络中功能的单位。 下面先从一些简单的层开始介绍 层的实现中有两个共通的方法(接口) forward() 和 backward() 。 forward() 对应正向传播 backward() 对应反向传播 现在来实现乘法层。看下面代码 backward()将从上

    2024年02月09日
    浏览(38)
  • 深度学习笔记(kaggle课程《Intro to Deep Learning》)

    深度学习是一种机器学习方法,通过构建和训练深层神经网络来处理和理解数据。它模仿人脑神经系统的工作方式,通过多层次的神经网络结构来学习和提取数据的特征。深度学习在图像识别、语音识别、自然语言处理等领域取得了重大突破,并被广泛应用于人工智能技术中

    2024年02月13日
    浏览(50)
  • 【Pytorch深度学习开发实践学习】B站刘二大人课程笔记整理lecture04反向传播

    lecture04反向传播 课程网址 Pytorch深度学习实践 部分课件内容: pytorch的机制是动态计算图, tensor里面既有data也有gradient

    2024年02月22日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包