Pytorch 自定義前饋反饋函數(shù)

參考:https://pytorch.org/tutorials/beginner/examples_autograd/two_layer_net_custom_function.html

torch.autograd.Function

  • given a random x, y, W1, W2.
    y = ( W1 * x) * W2, to predict y with input x using gradient descent by minimizing squared Eculidean distance.
  • We redefine ReLU and achieve the forward pass and backward pass.
    這里自定義了 ReLU函數(shù)的前饋和反饋過程
import torch

class MyReLU(torch.autograd.Function):
    """
    We can implement our own custom autograd Functions by subclassing
    torch.autograd.Function and implementing the forward and backward passes
    which operate on Tensors.
    """
    @staticmethod
    def forward(ctx, input):
        """
        In the forward pass we receive a Tensor containing the input and return
        a Tensor containing the output. ctx is a context object that can be used
        to stash information for backward computation. You can cache arbitrary
        objects for use in the backward pass using the ctx.save_for_backward method.
        """
        ctx.save_for_backward(input)
        return input.clamp(min=0)

    @staticmethod
    def backward(ctx, grad_output):
        """
        In the backward pass we receive a Tensor containing the gradient of the loss
        with respect to the output, and we need to compute the gradient of the loss
        with respect to the input.
        """
        input, = ctx.saved_tensors
        grad_input = grad_output.clone()
        grad_input[input<0] = 0
        return grad_input

dtype = torch.float
device = torch.device("cpu")

# device = torch.device("cuda:0")  # Uncomment this to run on GPU
# torch.backends.cuda.matmul.allow_tf32 = False  # Uncomment this to run on GPU

# The above line disables TensorFloat32. This a feature that allows
# networks to run at a much faster speed while sacrificing precision.
# Although TensorFloat32 works well on most real models, for our toy model
# in this tutorial, the sacrificed precision causes convergence issue.
# For more information, see:
# https://pytorch.org/docs/stable/notes/cuda.html#tensorfloat-32-tf32-on-ampere-devices

# N is batch size; D_in is input dimension;
# H is hidden dimension; D_out is output dimension.
N, D_in, H, D_out = 64, 1000, 100, 10

# Create random Tensors to hold input and outputs.
x = torch.randn(N, D_in, device=device, dtype=dtype)
y = torch.randn(N, D_out, device=device, dtype=dtype)

# Create random Tensors for weights.
w1 = torch.randn(D_in, H, device=device, dtype=dtype, requires_grad=True)
w2 = torch.randn(H, D_out, device=device, dtype=dtype, requires_grad=True)

lr = 1e-6

relu = MyReLU.apply
for i in range(500):
    
    y_pred = relu(x.mm(w1)).mm(w2)

    loss = (y_pred-y).pow(2).sum()

    if i % 100 == 99:
        print(i, loss.item())

    loss.backward()

# 參數(shù)的更新常規(guī)所使用的是`optim.step()`对碌,去對定義在`optim`里面的`model.parameters()`這里進行更新
# 由于這里我們不使用優(yōu)化器芍秆,因此這里直接手動進行更新待逞,注意這里已經(jīng)不需要算梯度了竞阐,只是把已經(jīng)算好的梯度進行更新
    with torch.no_grad(): 
        w1-=lr*w1.grad
        w2-=lr*w2.grad

        w1.grad.zero_()
        w2.grad.zero_()

輸出結(jié)果:

99 952.6715087890625
199 6.376166820526123
299 0.06997707486152649
399 0.0012868450721725821
499 0.00012174161383882165
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纬凤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子雪营,更是在濱河造成了極大的恐慌不翩,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件指蚜,死亡現(xiàn)場離奇詭異稚瘾,居然都是意外死亡,警方通過查閱死者的電腦和手機姚炕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門摊欠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人柱宦,你說我怎么就攤上這事些椒。” “怎么了掸刊?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵免糕,是天一觀的道長。 經(jīng)常有香客問我忧侧,道長石窑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任蚓炬,我火速辦了婚禮松逊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘肯夏。我一直安慰自己经宏,他們只是感情好犀暑,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著烁兰,像睡著了一般耐亏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沪斟,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天广辰,我揣著相機與錄音,去河邊找鬼主之。 笑死择吊,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的杀餐。 我是一名探鬼主播干发,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼史翘!你這毒婦竟也來了枉长?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤琼讽,失蹤者是張志新(化名)和其女友劉穎必峰,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钻蹬,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡吼蚁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了问欠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肝匆。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖顺献,靈堂內(nèi)的尸體忽然破棺而出旗国,到底是詐尸還是另有隱情,我是刑警寧澤注整,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布能曾,位于F島的核電站,受9級特大地震影響肿轨,放射性物質(zhì)發(fā)生泄漏寿冕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一椒袍、第九天 我趴在偏房一處隱蔽的房頂上張望驼唱。 院中可真熱鬧,春花似錦槐沼、人聲如沸曙蒸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纽窟。三九已至,卻和暖如春兼吓,著一層夾襖步出監(jiān)牢的瞬間臂港,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工视搏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留审孽,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓浑娜,卻偏偏與公主長得像佑力,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子筋遭,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容