pytorch動(dòng)態(tài)網(wǎng)絡(luò)以及權(quán)重共享實(shí)例
pytorch 動(dòng)態(tài)網(wǎng)絡(luò)+權(quán)值共享
pytorch以動(dòng)態(tài)圖著稱(chēng),下面以一個(gè)栗子來(lái)實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)絡(luò)和權(quán)值共享技術(shù):
# -*- coding: utf-8 -*-
import random
import torch
class DynamicNet(torch.nn.Module):
def __init__(self, D_in, H, D_out):
"""
這里構(gòu)造了幾個(gè)向前傳播過(guò)程中用到的線(xiàn)性函數(shù)
"""
super(DynamicNet, self).__init__()
self.input_linear = torch.nn.Linear(D_in, H)
self.middle_linear = torch.nn.Linear(H, H)
self.output_linear = torch.nn.Linear(H, D_out)
def forward(self, x):
"""
For the forward pass of the model, we randomly choose either 0, 1, 2, or 3
and reuse the middle_linear Module that many times to compute hidden layer
representations.
Since each forward pass builds a dynamic computation graph, we can use normal
Python control-flow operators like loops or conditional statements when
defining the forward pass of the model.
Here we also see that it is perfectly safe to reuse the same Module many
times when defining a computational graph. This is a big improvement from Lua
Torch, where each Module could be used only once.
這里中間層每次向前過(guò)程中都是隨機(jī)添加0-3層,而且中間層都是使用的同一個(gè)線(xiàn)性層,這樣計(jì)算時(shí),權(quán)值也是用的同一個(gè)。
"""
h_relu = self.input_linear(x).clamp(min=0)
for _ in range(random.randint(0, 3)):
h_relu = self.middle_linear(h_relu).clamp(min=0)
y_pred = self.output_linear(h_relu)
return y_pred
# 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 inputs and outputs
x = torch.randn(N, D_in)
y = torch.randn(N, D_out)
# Construct our model by instantiating the class defined above
model = DynamicNet(D_in, H, D_out)
# Construct our loss function and an Optimizer. Training this strange model with
# vanilla stochastic gradient descent is tough, so we use momentum
criterion = torch.nn.MSELoss(reduction='sum')
optimizer = torch.optim.SGD(model.parameters(), lr=1e-4, momentum=0.9)
for t in range(500):
# Forward pass: Compute predicted y by passing x to the model
y_pred = model(x)
# Compute and print loss
loss = criterion(y_pred, y)
print(t, loss.item())
# Zero gradients, perform a backward pass, and update the weights.
optimizer.zero_grad()
loss.backward()
optimizer.step()
這個(gè)程序?qū)嶋H上是一種RNN結(jié)構(gòu),在執(zhí)行過(guò)程中動(dòng)態(tài)的構(gòu)建計(jì)算圖
References: Pytorch Documentations.
以上這篇pytorch動(dòng)態(tài)網(wǎng)絡(luò)以及權(quán)重共享實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python?matplotlib之折線(xiàn)圖的各種樣式與畫(huà)法總結(jié)
matplotlib是Python中的一個(gè)第三方庫(kù),主要用于開(kāi)發(fā)2D圖表,以漸進(jìn)式、交互式的方式實(shí)現(xiàn)數(shù)據(jù)可視化,可以更直觀(guān)的呈現(xiàn)數(shù)據(jù),使數(shù)據(jù)更具說(shuō)服力,下面這篇文章主要給大家介紹了關(guān)于Python?matplotlib之折線(xiàn)圖的各種樣式與畫(huà)法的相關(guān)資料,需要的朋友可以參考下2022-12-12
Python實(shí)現(xiàn)識(shí)別圖片為文字的示例代碼
這篇文章主要為大家詳細(xì)介紹了Python如何不調(diào)用三方收費(fèi)接口,照樣實(shí)現(xiàn)識(shí)別圖片為文字的功能。文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-08-08
Restful_framework視圖組件代碼實(shí)例解析
這篇文章主要介紹了Restful_framework視圖組件代碼實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
python Dejavu庫(kù)快速識(shí)別音頻指紋實(shí)例探究
這篇文章主要為大家介紹了python Dejavu庫(kù)快速識(shí)別音頻指紋實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
解決python虛擬環(huán)境切換無(wú)效的問(wèn)題
這篇文章主要介紹了解決python虛擬環(huán)境切換無(wú)效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
opencv python 基于KNN的手寫(xiě)體識(shí)別的實(shí)例
這篇文章主要介紹了opencv python 基于KNN的手寫(xiě)體識(shí)別的實(shí)例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
Python實(shí)現(xiàn)提高運(yùn)行速度的技巧分享
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)提高運(yùn)行速度的相關(guān)技巧,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下2023-06-06
親手教你實(shí)現(xiàn)pynq-z2條形碼識(shí)別功能
這篇文章主要介紹了pynq-z2條形碼識(shí)別功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
python安裝自己的代碼到site-packages問(wèn)題
這篇文章主要介紹了python安裝自己的代碼到site-packages問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11

