亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > pytorch自定義不可導激活函數的操作

pytorch自定義不可導激活函數的操作

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

pytorch自定義不可導激活函數

今天自定義不可導函數的時候遇到了一個大坑。

首先我需要自定義一個函數:sign_f

import torch
from torch.autograd import Function
import torch.nn as nn
class sign_f(Function):
    @staticmethod
    def forward(ctx, inputs):
        output = inputs.new(inputs.size())
        output[inputs >= 0.] = 1
        output[inputs  0.] = -1
        ctx.save_for_backward(inputs)
        return output

    @staticmethod
    def backward(ctx, grad_output):
        input_, = ctx.saved_tensors
        grad_output[input_>1.] = 0
        grad_output[input_-1.] = 0
        return grad_output

然后我需要把它封裝為一個module 類型,就像 nn.Conv2d 模塊 封裝 f.conv2d 一樣,于是

import torch
from torch.autograd import Function
import torch.nn as nn
class sign_(nn.Module):
	# 我需要的module
    def __init__(self, *kargs, **kwargs):
        super(sign_, self).__init__(*kargs, **kwargs)
        
    def forward(self, inputs):
    	# 使用自定義函數
        outs = sign_f(inputs)
        return outs

class sign_f(Function):
    @staticmethod
    def forward(ctx, inputs):
        output = inputs.new(inputs.size())
        output[inputs >= 0.] = 1
        output[inputs  0.] = -1
        ctx.save_for_backward(inputs)
        return output

    @staticmethod
    def backward(ctx, grad_output):
        input_, = ctx.saved_tensors
        grad_output[input_>1.] = 0
        grad_output[input_-1.] = 0
        return grad_output

結果報錯

TypeError: backward() missing 2 required positional arguments: 'ctx' and 'grad_output'

我試了半天,發現自定義函數后面要加 apply ,詳細見下面

import torch
from torch.autograd import Function
import torch.nn as nn
class sign_(nn.Module):

    def __init__(self, *kargs, **kwargs):
        super(sign_, self).__init__(*kargs, **kwargs)
        self.r = sign_f.apply ### -----注意此處
        
    def forward(self, inputs):
        outs = self.r(inputs)
        return outs

class sign_f(Function):
    @staticmethod
    def forward(ctx, inputs):
        output = inputs.new(inputs.size())
        output[inputs >= 0.] = 1
        output[inputs  0.] = -1
        ctx.save_for_backward(inputs)
        return output

    @staticmethod
    def backward(ctx, grad_output):
        input_, = ctx.saved_tensors
        grad_output[input_>1.] = 0
        grad_output[input_-1.] = 0
        return grad_output

問題解決了!

PyTorch自定義帶學習參數的激活函數(如sigmoid)

有的時候我們需要給損失函數設一個超參數但是又不想設固定閾值想和網絡一起自動學習,例如給Sigmoid一個參數alpha進行調節

函數如下:

import torch.nn as nn
import torch
class LearnableSigmoid(nn.Module):
    def __init__(self, ):
        super(LearnableSigmoid, self).__init__()
        self.weight = torch.nn.Parameter(torch.FloatTensor(1), requires_grad=True)

        self.reset_parameters()
    def reset_parameters(self):
        self.weight.data.fill_(1.0)
        
    def forward(self, input):
        return 1/(1 +  torch.exp(-self.weight*input))

驗證和Sigmoid的一致性

class LearnableSigmoid(nn.Module):
    def __init__(self, ):
        super(LearnableSigmoid, self).__init__()
        self.weight = torch.nn.Parameter(torch.FloatTensor(1), requires_grad=True)

        self.reset_parameters()
    def reset_parameters(self):
        self.weight.data.fill_(1.0)
        
    def forward(self, input):
        return 1/(1 +  torch.exp(-self.weight*input))
   
Sigmoid = nn.Sigmoid()
LearnSigmoid = LearnableSigmoid()
input = torch.tensor([[0.5289, 0.1338, 0.3513],
        [0.4379, 0.1828, 0.4629],
        [0.4302, 0.1358, 0.4180]])

print(Sigmoid(input))
print(LearnSigmoid(input))

輸出結果

tensor([[0.6292, 0.5334, 0.5869],
[0.6078, 0.5456, 0.6137],
[0.6059, 0.5339, 0.6030]])

tensor([[0.6292, 0.5334, 0.5869],
[0.6078, 0.5456, 0.6137],
[0.6059, 0.5339, 0.6030]], grad_fn=MulBackward0>)

驗證權重是不是會更新

import torch.nn as nn
import torch
import torch.optim as optim
class LearnableSigmoid(nn.Module):
    def __init__(self, ):
        super(LearnableSigmoid, self).__init__()
        self.weight = torch.nn.Parameter(torch.FloatTensor(1), requires_grad=True)

        self.reset_parameters()

    def reset_parameters(self):
        self.weight.data.fill_(1.0)
        
    def forward(self, input):
        return 1/(1 +  torch.exp(-self.weight*input))
        
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()       
        self.LSigmoid = LearnableSigmoid()
    def forward(self, x):                
        x = self.LSigmoid(x)
        return x

net = Net()  
print(list(net.parameters()))
optimizer = optim.SGD(net.parameters(), lr=0.01)
learning_rate=0.001
input_data=torch.randn(10,2)
target=torch.FloatTensor(10, 2).random_(8)
criterion = torch.nn.MSELoss(reduce=True, size_average=True)

for i in range(2):
    optimizer.zero_grad()     
    output = net(input_data)   
    loss = criterion(output, target)
    loss.backward()             
    optimizer.step()           
    print(list(net.parameters()))

輸出結果

tensor([1.], requires_grad=True)]
[Parameter containing:
tensor([0.9979], requires_grad=True)]
[Parameter containing:
tensor([0.9958], requires_grad=True)]

會更新~

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

您可能感興趣的文章:
  • pytorch方法測試——激活函數(ReLU)詳解
  • PyTorch中常用的激活函數的方法示例
  • Pytorch 實現自定義參數層的例子

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

巨人網絡通訊聲明:本文標題《pytorch自定義不可導激活函數的操作》,本文關鍵詞  pytorch,自定義,不,可導,激活,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《pytorch自定義不可導激活函數的操作》相關的同類信息!
  • 本頁收集關于pytorch自定義不可導激活函數的操作的相關信息資訊供網民參考!
  • 推薦文章
    麻豆午夜视频| 天天做日日爱夜夜爽| 99久久网站| 精品国产一区二区三区国产馆| 国产网站在线| 成人av在线播放| 色综合久久久久综合体桃花网| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 精品视频在线看| 精品视频免费观看| 韩国三级视频网站| 四虎影视久久久| 欧美一级视频免费| 青青青草影院| 精品视频在线观看免费| 999久久狠狠免费精品| 日韩免费在线| 久久国产精品只做精品| 欧美另类videosbestsex高清| 日本免费区| 成人免费一级毛片在线播放视频| 精品国产一区二区三区久久久蜜臀 | 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产亚洲免费观看| 国产伦久视频免费观看 视频| 久久精品免视看国产明星| 一级女性全黄久久生活片| 美女免费精品高清毛片在线视| 欧美激情一区二区三区中文字幕| 亚洲精品永久一区| 久久精品免视看国产明星| 天天色成人网| 国产成人精品在线| 免费国产在线视频| 午夜欧美福利| 国产原创视频在线| 色综合久久天天综合绕观看| 四虎影视久久久免费| 国产a视频| 日本伦理黄色大片在线观看网站| 欧美日本免费| 99久久精品国产免费| 亚欧成人乱码一区二区| 成人a大片高清在线观看| 国产欧美精品| 亚洲 欧美 成人日韩| 日韩中文字幕在线亚洲一区| 国产视频久久久久| 国产国产人免费视频成69堂| 亚洲第一视频在线播放| 香蕉视频久久| 一a一级片| 国产一区二区精品尤物| 日本免费区| 一级毛片视频免费| 亚洲wwwwww| a级毛片免费观看网站| 亚洲精品影院一区二区| 久久久成人网| 久久精品店| 亚洲女人国产香蕉久久精品| 国产视频一区在线| 精品久久久久久影院免费| 久久国产一久久高清| 韩国三级一区| 久草免费在线观看| 免费一级片网站| 精品视频在线观看一区二区| 成人免费网站久久久| 国产一区免费在线观看| 国产伦久视频免费观看视频| 国产麻豆精品hdvideoss| 国产一区免费在线观看| 亚洲精品中文一区不卡| 九九九在线视频| 国产成人欧美一区二区三区的| 久草免费资源| 91麻豆精品国产自产在线观看一区 | 青草国产在线观看| 日韩av东京社区男人的天堂| 二级片在线观看| 国产高清在线精品一区a| 久久成人亚洲| 国产伦久视频免费观看视频| 成人免费一级毛片在线播放视频| 国产一区免费在线观看| 99久久精品国产片| 日日夜夜婷婷| 日本免费看视频| 欧美一级视| 免费国产一级特黄aa大片在线| 国产成人精品综合| 二级特黄绝大片免费视频大片| 沈樵在线观看福利| 韩国毛片| 精品视频在线观看视频免费视频 | 色综合久久久久综合体桃花网| 国产伦精品一区二区三区在线观看 | 亚洲wwwwww| 99热精品在线| 天天做人人爱夜夜爽2020| 国产一区二区精品久久91| 日本伦理片网站| 日本乱中文字幕系列| 久久久成人网| 日本免费乱人伦在线观看 | 欧美一级视频免费| 欧美a级片视频| 亚洲精品影院| 精品视频免费在线| 日韩女人做爰大片| 九九精品在线播放| 你懂的福利视频| 精品国产一区二区三区久久久蜜臀 | 国产网站免费视频| 国产韩国精品一区二区三区| 欧美激情在线精品video| 99热精品在线| 成人a大片在线观看| 国产麻豆精品hdvideoss| 日韩字幕在线| 91麻豆精品国产自产在线| 香蕉视频一级| 国产不卡在线观看视频| 欧美激情一区二区三区在线| 四虎影视久久久免费| 国产a免费观看| 91麻豆国产福利精品| 韩国毛片| 青青久热| 国产精品自拍在线| 成人a级高清视频在线观看| 日本伦理片网站| 国产成人啪精品视频免费软件| 欧美另类videosbestsex久久| 91麻豆精品国产自产在线观看一区 | 国产韩国精品一区二区三区| 欧美一级视| 日本在线不卡视频| 国产视频一区在线| 亚洲第一色在线| 午夜激情视频在线播放| 亚欧成人乱码一区二区| 日本在线不卡免费视频一区| 国产伦久视频免费观看视频| 一级女性全黄久久生活片| 黄色免费三级| 香蕉视频久久| 精品视频在线观看一区二区三区| 超级乱淫黄漫画免费| 天天做日日爱夜夜爽| 国产高清在线精品一区a| 美女免费精品高清毛片在线视| 可以免费看毛片的网站| 免费国产在线观看不卡| 欧美a级片免费看| 国产亚洲精品aaa大片| 精品久久久久久中文字幕一区| 91麻豆精品国产综合久久久| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 韩国三级视频网站| 久久精品免视看国产成人2021| 久久久久久久网| 可以免费看污视频的网站| 青青久久网| 天天色成人| 亚洲爆爽| 韩国三级视频网站| 成人av在线播放| 亚飞与亚基在线观看| 成人高清视频免费观看| 韩国三级一区| 久久精品人人做人人爽97| 午夜激情视频在线播放| 欧美国产日韩久久久| 欧美a免费| 日本在线不卡视频| 一级女性全黄生活片免费| 高清一级做a爱过程不卡视频| 国产亚洲免费观看| 精品久久久久久中文字幕一区| 国产成+人+综合+亚洲不卡| 日韩免费片| 99久久精品国产高清一区二区| 欧美日本二区| 一本高清在线| 久久精品欧美一区二区| 一级毛片视频播放| 高清一级毛片一本到免费观看| 精品久久久久久中文字幕一区 | 日韩专区亚洲综合久久| 免费一级片在线| 天天色成人| 欧美大片aaaa一级毛片| 精品在线视频播放| 欧美一级视频高清片| 久草免费在线观看| 免费国产在线观看| 国产91精品一区| 麻豆网站在线免费观看|