iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >PyTorch 如何检查模型梯度是否可导
  • 784
分享到

PyTorch 如何检查模型梯度是否可导

2024-04-02 19:04:59 784人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

一、PyTorch 检查模型梯度是否可导 当我们构建复杂网络模型或在模型中加入复杂操作时,可能会需要验证该模型或操作是否可导,即模型是否能够优化,在PyTorch框架下,我们可以使用

一、PyTorch 检查模型梯度是否可导

当我们构建复杂网络模型或在模型中加入复杂操作时,可能会需要验证该模型或操作是否可导,即模型是否能够优化,在PyTorch框架下,我们可以使用torch.autograd.gradcheck函数来实现这一功能。

首先看一下官方文档中关于该函数的介绍:

可以看到官方文档中介绍了该函数基于何种方法,以及其参数列表,下面给出几个例子介绍其使用方法,注意:

Tensor需要是双精度浮点型且设置requires_grad = True

第一个例子:检查某一操作是否可导


from torch.autograd import gradcheck
import torch
import torch.nn as nn
 
inputs = torch.randn((10, 5), requires_grad=True, dtype=torch.double)
linear = nn.Linear(5, 3)
linear = linear.double()
test = gradcheck(lambda x: linear(x), inputs)
print("Are the gradients correct: ", test)

输出为:

Are the gradients correct: True

第二个例子:检查某一网络模型是否可导


from torch.autograd import gradcheck
import torch
import torch.nn as nn 
# 定义神经网络模型
class Net(nn.Module):
 
    def __init__(self):
        super(Net, self).__init__()
        self.net = nn.Sequential(
            nn.Linear(15, 30),
            nn.ReLU(),
            nn.Linear(30, 15),
            nn.ReLU(),
            nn.Linear(15, 1),
            nn.Sigmoid()
        )
 
    def forward(self, x):
        y = self.net(x)
        return y
 
net = Net()
net = net.double()
inputs = torch.randn((10, 15), requires_grad=True, dtype=torch.double)
test = gradcheck(net, inputs)
print("Are the gradients correct: ", test)

输出为:

Are the gradients correct: True

二、Pytorch求导

1.标量对矩阵求导

在这里插入图片描述

验证:


>>>import torch
>>>a = torch.tensor([[1],[2],[3.],[4]])    # 4*1列向量
>>>X = torch.tensor([[1,2,3],[5,6,7],[8,9,10],[5,4,3.]],requires_grad=True)  #4*3矩阵,注意,值必须要是float类型
>>>b = torch.tensor([[2],[3],[4.]]) #3*1列向量
>>>f = a.view(1,-1).mm(X).mm(b)  # f = a^T.dot(X).dot(b)
>>>f.backward()
>>>X.grad   #df/dX = a.dot(b^T)
tensor([[ 2.,  3.,  4.],
    [ 4.,  6.,  8.],
    [ 6.,  9., 12.],
    [ 8., 12., 16.]])
>>>a.grad b.grad   # a和b的requires_grad都为默认(默认为False),所以求导时,没有梯度
(None, None)
>>>a.mm(b.view(1,-1))  # a.dot(b^T)
    tensor([[ 2.,  3.,  4.],
    [ 4.,  6.,  8.],
    [ 6.,  9., 12.],
    [ 8., 12., 16.]])

2.矩阵对矩阵求导

在这里插入图片描述 在这里插入图片描述

验证:


>>>A = torch.tensor([[1,2],[3,4.]])  #2*2矩阵
>>>X =  torch.tensor([[1,2,3],[4,5.,6]],requires_grad=True)  # 2*3矩阵
>>>F = A.mm(X)
>>>F
tensor([[ 9., 12., 15.],
    [19., 26., 33.]], grad_fn=<MmBackward>)
>>>F.backgrad(torch.ones_like(F)) # 注意括号里要加上这句
>>>X.grad
tensor([[4., 4., 4.],
    [6., 6., 6.]])

注意:

requires_grad为True的数组必须是float类型

进行backgrad的必须是标量,如果是向量,必须在后面括号里加上torch.ones_like(X)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: PyTorch 如何检查模型梯度是否可导

本文链接: https://www.lsjlt.com/news/127636.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PyTorch 如何检查模型梯度是否可导
    一、PyTorch 检查模型梯度是否可导 当我们构建复杂网络模型或在模型中加入复杂操作时,可能会需要验证该模型或操作是否可导,即模型是否能够优化,在PyTorch框架下,我们可以使用...
    99+
    2024-04-02
  • Pytorch查看tensor是否有梯度(值)以及开启梯度
    文章目录 一. requires_grad 属性:查看是否记录梯度二. requires_grad_ ()函数:调用函数设置记录梯度与否三. requires_grad属性参数,创建tenso...
    99+
    2023-09-21
    pytorch python 深度学习
  • jQuery如何检查是否可见?
    这篇文章将为大家详细讲解有关jQuery如何检查是否可见?,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。jQuery 检查可见性 jQuery 提供了多种方法来检查元素是否可见,这些方法涵盖了从基本可见性...
    99+
    2024-04-02
  • jQuery如何检查元素是否可见?
    ...
    99+
    2024-04-02
  • PyTorch如何检查GPU版本是否安装成功
    这篇文章将为大家详细讲解有关PyTorch如何检查GPU版本是否安装成功,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。anaconda命令行下检查:(base) PS C:\Users...
    99+
    2023-06-14
  • 如何检查cookie是否过期
    在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天编程网就整理分享《如何检查cookie是否过期》,聊聊,希望...
    99+
    2024-04-05
  • 如何检查mysql是否安装
    今天小编给大家分享一下如何检查mysql是否安装的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2024-04-02
  • jQuery如何检查是否隐藏?
    这篇文章将为大家详细讲解有关jQuery如何检查是否隐藏?,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。jQuery 检查是否隐藏的指南 jQuery 提供了多种方法来检查元素是否隐藏,以下是常用的方法:...
    99+
    2024-04-02
  • 详解Python如何批量检查图像是否可用
    数据集中的图像,一般不可用在以下3个方面: 1.图像过小 2.无法打开 3.“Premature end of JPEG file” 这些图像可能会导致模型的...
    99+
    2024-04-02
  • 如何在pytorch中部署半精度模型
    如何在pytorch中部署半精度模型?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。具体方法在pytorch中,一般模型定义都继承torch.nn.Moudle,...
    99+
    2023-06-15
  • sql如何检查表是否存在
    在 SQL 中,可以使用以下语句检查表是否存在: IF EXISTS (SELECT 1 FROM sys.tables W...
    99+
    2024-04-20
    sql
  • jQuery如何检查是否包含类?
    这篇文章将为大家详细讲解有关jQuery如何检查是否包含类?,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。jQuery 检查是否包含类 jQuery 提供了一个方便的方法,用于检查元素是否包含特定的 CS...
    99+
    2024-04-02
  • linux如何检查vsftpd是否安装
    这篇文章主要讲解了“linux如何检查vsftpd是否安装”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux如何检查vsftpd是否安装”吧!linux检查vsftpd是否安装的方法:...
    99+
    2023-06-30
  • 如何检查nodejs是否安装成功
    这篇文章主要为大家展示了“如何检查nodejs是否安装成功”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何检查nodejs是否安装成功”这篇文章吧。 ...
    99+
    2024-04-02
  • JavaScript如何检查值是否为数组
    这篇文章主要介绍JavaScript如何检查值是否为数组,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!检查值是否为数组const arr = [1, 2, 3];&n...
    99+
    2023-06-27
  • jquery如何检查图片是否存在
    这篇文章主要介绍“jquery如何检查图片是否存在”,在日常操作中,相信很多人在jquery如何检查图片是否存在问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”jquery如何检查图片是否存在”的疑惑有所帮助!...
    99+
    2023-07-05
  • 如何检查mysql是否安装成功
    小编给大家分享一下如何检查mysql是否安装成功,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!检查mysql是否安装成功的步骤:...
    99+
    2024-04-02
  • jquery如何检查元素是否隐藏
    本篇内容主要讲解“jquery如何检查元素是否隐藏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“jquery如何检查元素是否隐藏”吧! ...
    99+
    2024-04-02
  • jQuery如何检查图像是否加载
    小编给大家分享一下jQuery如何检查图像是否加载,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!检查图像是否加载有时为了继续脚本...
    99+
    2024-04-02
  • js如何检查对象是否为空
    小编给大家分享一下js如何检查对象是否为空,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!检查对象是否为空如果我们想要检查对象是否为空,可以使用以下方式:Objec...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作