pytorch快速搭建神经网络--函数自动求导(automatic differentiation)

序言:神经网络本质上就是自动求导,寻找最小误差的过程。使用pytorch的好处就在于它能提供自动求导工具包,在这里我将总结如何使用工具包。

目录

1. 自动求导

1.1自动求类torch.tensor

1.2 实现求导

1.3 终止一个Tensor在计算图中的追踪回溯

1.3.1 .detach()求偏导数

1.3.2 with torch.no_grad()进行测试集测试

2.总结参考


1. 自动求导

1.1自动求类torch.tensor

  • 在计算y对于x的梯度前,如何储存计算的梯度呢?
    1. 将属性.requires_grad设置为True, 它将追踪在这个类上定义的所有操作.
    2. 当代码要进行反向传播的时候, 直接调用.backward()就可以自动计算所有的梯度.
    3. 梯度储存在这个Tensor上的所有梯度将被累加进属性.grad中.
  • 注意:我们不会在每次对一个参数求导时都分配新的内存。 因为我们经常会成千上万次地更新相同的参数,每次都分配新的内存可能很快就会将内存耗尽。默认是requires_grad_属性是FALSE

1.2 实现求导

  • 举个例子:y=2x^{^{2}} 求导
  1. 初始化x
import torch
x=torch.arange(4.0)
x
x.requires_grad_(True)#开启储存梯度
x.grad #默认是none,调用backward()累加梯度到grad属性
x

        2. 计算y

y = 2 * torch.dot(x, x)
y

 

        grad_fn=<MulBackward0>是计算对x做的操作

        3.求导:y的导数是4x,验证是否正确

y.backward()
x.grad
x.grad == 4 * x

1.3 终止一个Tensor在计算图中的追踪回溯

1.3.1 .detach()求偏导数

  • 高数小课堂开课了
    • 例如,假设y是作为x的函数计算的,而z则是作为yx的函数计算的。 想象一下,我们想计算z关于x的梯度,但由于某种原因,我们希望将y视为一个常数, 并且只考虑到xy被计算后发挥的作用。在这里,我们可以分离y来返回一个新变量u,该变量与y具有相同的值, 但丢弃计算图中如何计算y的任何信息。 换句话说,梯度不会向后流经ux
    • 那么就是如何计算z=u*x关于x的偏导数.
    • 求导结果z=u,即z=x^2
x.grad.zero_()#将之前梯度计算清零
y = x * x
u = y.detach()#剔除计算图
z = u * x

z.sum().backward()
x.grad == u

总结 注意:

  1. 执行.detach()就可以将该Tensor从计算图中撤下, 在未来的回溯计算中也不会再计算该Tensor。
  2. z.sum().backward()什么要用sum() ,去看了源码才知道只有对标量输出它才会计算梯度,也就是说如果是个矩阵要先转化为标量才可以使用。为什么要这么设计呢?这里其实是为了服务深度学习计算批量每个样本的偏导数之和。            

1.3.2 with torch.no_grad()进行测试集测试

with torch.no_grad():
    print((x ** 2).requires_grad_)

采用代码块的方式with torch.no_grad():, 这种方式非常适用于对模型进行预测的时候, 因为预测阶段不再需要对梯度进行计算.

with torch.no_grad():
    print((x ** 2).requires_grad_)

2.总结参考

  • 实现求导
    • torch.ones(n, n, requires_grad=True)
    • x.requires_grad_(True)
    • y.backward()
    • x.grad
  • 终止对计算图的回溯
    • .detach()
    • with torch.no_grad():

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
### 回答1: pytorch-multi-label-classifier-master是一个基于PyTorch的多标签分类器项目。该项目旨在使用PyTorch框架构建一个能够对具有多个标签的数据样本进行分类的模型。 PyTorch是一个流行的深度学习框架,能够实现多种深度学习模型的构建与训练。它提供了丰富的工具和函数,简化了模型的复杂性,并提供了高效的计算能力。 在这个项目中,multi-label指的是数据样本可以被分为多个标签。与传统的单标签分类不同,每个样本可以被分为多个类别,这增加了分类问题的复杂性。模型需要学习如何给每个样本分配正确的标签。 pytorch-multi-label-classifier-master项目提供了一个设置多标签分类模型的基础架构。它包含了数据预处理、模型构建、训练和评估等步骤。用户可以根据自己的数据集和需求,对该项目进行定制。 通过使用pytorch-multi-label-classifier-master项目,用户可以快速搭建一个多标签分类器,用于解决具有多个标签的数据分类问题。同时,该项目还提供了一些示例数据和模型,帮助用户更好地理解和使用多标签分类技术。 总而言之,pytorch-multi-label-classifier-master是一个基于PyTorch框架用于多标签分类的项目,为用户提供了一个简单且灵活的搭建多标签分类器的框架,方便用户解决多标签分类问题。 ### 回答2: pytorch-multi-label-classifier-master是一个基于PyTorch的多标签分类器项目。它提供了一种使用神经网络模型来处理多标签分类任务的解决方案。 该项目的主要目标是通过深度学习技术来提高多标签分类问题的准确度。它使用PyTorch作为深度学习框架,该框架提供了丰富的工具和功能来构建和训练神经网络模型。 在pytorch-multi-label-classifier-master中,你可以找到许多工具和函数来进行数据预处理、模型构建、训练和评估。它支持常见的多标签分类算法,如卷积神经网络(CNN)和递归神经网络(RNN)。你可以根据自己的需求选择合适的模型,并通过简单的配置来进行训练。 该项目还提供了一些示例数据集和预训练模型,以帮助你更快地开始。你可以使用这些数据集来测试和调试你的模型,或者使用预训练模型来进行迁移学习。 pytorch-multi-label-classifier-master还支持一些常见的性能评估指标,如准确率、精确率、召回率和F1值。你可以使用这些指标来评估你的模型在多标签分类任务上的性能。 总的来说,pytorch-multi-label-classifier-master是一个方便易用的项目,旨在帮助你构建和训练用于多标签分类的深度学习模型。它提供了丰富的功能和工具,使你能够快速搭建一个准确度较高的多标签分类器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值