好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > PyTorch 如何檢查模型梯度是否可導

PyTorch 如何檢查模型梯度是否可導

熱門標簽:ai電銷機器人的優勢 商家地圖標注海報 打電話機器人營銷 騰訊地圖標注沒法顯示 地圖標注自己和別人標注區別 孝感營銷電話機器人效果怎么樣 聊城語音外呼系統 南陽打電話機器人 海外網吧地圖標注注冊

一、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)

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Pytorch通過保存為ONNX模型轉TensorRT5的實現
  • pytorch_pretrained_bert如何將tensorflow模型轉化為pytorch模型
  • pytorch模型的保存和加載、checkpoint操作
  • 解決Pytorch修改預訓練模型時遇到key不匹配的情況
  • pytorch 預訓練模型讀取修改相關參數的填坑問題
  • PyTorch模型轉TensorRT是怎么實現的?

標簽:六盤水 撫州 楊凌 迪慶 聊城 牡丹江 揚州 南寧

巨人網絡通訊聲明:本文標題《PyTorch 如何檢查模型梯度是否可導》,本文關鍵詞  PyTorch,如何,檢查,模型,梯度,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PyTorch 如何檢查模型梯度是否可導》相關的同類信息!
  • 本頁收集關于PyTorch 如何檢查模型梯度是否可導的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 丰满人妻中伦妇伦精品app| 将进酒archiveofown涨奶| 潘金莲的一级片| 换脸Al无码免费看片| 少妇高潮灌满白浆毛片免费看| 就要操就要射| 4438全网最大| 麻麻的丝袜脚夹得我好爽| 国产?无码?高潮电影欲动网站| 青青热在线精品播放国产| THEWHITEBOX精选黑与白| 啊宝贝嗯太深了哦h| 免费超爽大片黄网站| 他扒开我的内裤吻我下边| 亚洲另类小说网| 成人综合色站| 一级A片黄女人高潮网站 | 色www亚洲国产张柏芝| 中文字幕视频一区二区三区.| 亚洲欧美日韩在线不卡| 国产女人一线视频在线观看 | 啊灬啊别停灬再来一次| 日韩欧美猛交XXXXX无码| 91无码人妻精品1国产四虎| 欧美精产国品一二三区别在哪| 最近最新中文字幕免费大全| 床下不熟高干| 真人毛片一级视频播| 欧美97色伦欧美一区二区日韩| 日韩美女一级视频| 青青青在线精品免费观看| 美女露隐私全部免费直播| 办公室可不可以干湿你补车| 把女人弄特爽黄a大片 主演表 | 日本特黄视频| 精产国品一二三产品区别视频手机 | 国产一区二区三区不卡观| 国产精品日本无码亚洲精品蜜臀| 非洲黑人女bbwxxxx| 元媛花液湿润热铁| 国产精品久久久久久精品毛片牛奶|