色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
創作
電子發燒友網>電子資料下載>電子資料>PyTorch教程6.1之層和模塊

PyTorch教程6.1之層和模塊

2023-06-05 | pdf | 0.20 MB | 次下載 | 免費

資料介紹

當我們第一次引入神經網絡時,我們專注于具有單一輸出的線性模型。在這里,整個模型只包含一個神經元。請注意,單個神經元 (i) 接受一組輸入;(ii) 生成相應的標量輸出;(iii) 有一組相關參數,可以更新這些參數以優化一些感興趣的目標函數。然后,一旦我們開始考慮具有多個輸出的網絡,我們就利用矢量化算法來表征整個神經元層。就像單個神經元一樣,層 (i) 采用一組輸入,(ii) 生成相應的輸出,并且 (iii) 由一組可調參數描述。當我們進行 softmax 回歸時,單層本身就是模型。然而,即使我們隨后引入了 MLP,

有趣的是,對于 MLP,整個模型及其組成層都共享這種結構。整個模型接受原始輸入(特征),生成輸出(預測),并擁有參數(來自所有構成層的組合參數)。同樣,每個單獨的層攝取輸入(由前一層提供)生成輸出(后續層的輸入),并擁有一組可調參數,這些參數根據從后續層向后流動的信號進行更新。

雖然您可能認為神經元、層和模型為我們提供了足夠的抽象來開展我們的業務,但事實證明,我們經常發現談論比單個層大但比整個模型小的組件很方便。例如,在計算機視覺領域廣受歡迎的 ResNet-152 架構擁有數百層。這些層由層組的重復圖案組成一次一層地實現這樣的網絡會變得乏味。這種擔憂不僅僅是假設——這樣的設計模式在實踐中很常見。上面提到的 ResNet 架構贏得了 2015 年 ImageNet 和 COCO 計算機視覺識別和檢測競賽He et al. , 2016并且仍然是許多視覺任務的首選架構。層以各種重復模式排列的類似架構現在在其他領域無處不在,包括自然語言處理和語音。

為了實現這些復雜的網絡,我們引入了神經網絡模塊的概念模塊可以描述單個層、由多個層組成的組件或整個模型本身!使用模塊抽象的一個好處是它們可以組合成更大的工件,通常是遞歸的。如圖 6.1.1所示通過定義代碼以按需生成任意復雜度的模塊,我們可以編寫出奇緊湊的代碼并仍然實現復雜的神經網絡。

https://file.elecfans.com/web2/M00/A9/C7/poYBAGR9NP2AcRNaAAJd7roQfBs959.svg

圖 6.1.1多層組合成模塊,形成更大模型的重復模式。

編程的角度來看,模塊由表示。它的任何子類都必須定義一個前向傳播方法,將其輸入轉換為輸出,并且必須存儲任何必要的參數。請注意,某些模塊根本不需要任何參數。最后,為了計算梯度,模塊必須具有反向傳播方法。幸運的是,由于自動微分(在2.5 節中介紹)在定義我們自己的模塊時提供了一些幕后魔法,我們只需要擔心參數和前向傳播方法。

import torch
from torch import nn
from torch.nn import functional as F
from mxnet import np, npx
from mxnet.gluon import nn

npx.set_np()
from typing import List
import jax
from flax import linen as nn
from jax import numpy as jnp
from d2l import jax as d2l
No GPU/TPU found, falling back to CPU. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)
import tensorflow as tf

首先,我們重新審視用于實現 MLP 的代碼(第 5.1 節)。以下代碼生成一個網絡,該網絡具有一個具有 256 個單元和 ReLU 激活的全連接隱藏層,后跟一個具有 10 個單元的全連接輸出層(無激活函數)。

net = nn.Sequential(nn.LazyLinear(256), nn.ReLU(), nn.LazyLinear(10))

X = torch.rand(2, 20)
net(X).shape
torch.Size([2, 10])

在這個例子中,我們通過實例化一個 來構造我們的模型 nn.Sequential,層按照它們應該被執行的順序作為參數傳遞。簡而言之,nn.Sequential定義了一種特殊的Module,在 PyTorch 中呈現模塊的類。它維護一個有序的 constituent 列表Module請注意,兩個完全連接的層中的每一個都是該類的一個實例,Linear該類本身是 的子類Module前向傳播 ( forward) 方法也非常簡單:它將列表中的每個模塊鏈接在一起,將每個模塊的輸出作為輸入傳遞給下一個模塊。請注意,到目前為止,我們一直在通過構造調用我們的模型 net(X)以獲得它們的輸出。這實際上只是 net.__call__(X).

net = nn.Sequential()
net.add(nn.Dense(256, activation='relu'))
net.add(nn.Dense(10))
net.initialize()

X = np.random.uniform(size=(2, 20))
net(X).shape
(2, 10)

In this example, we constructed our model by instantiating an nn.Sequential, assigning the returned object to the net variable. Next, we repeatedly call its add method, appending layers in the order that they should be executed. In short, nn.Sequential defines a special kind of Block, the class that presents a module in Gluon. It maintains an ordered list of constituent Blocks. The add method simply facilitates the addition of each successive Block to the list. Note that each layer is an instance of the Dense class which is itself a subclass of Block. The forward propagation (forward) method is also remarkably simple: it chains each Block in the list together, passing the output of each as input to the next. Note that until now, we have been invoking our models via the construction net(X) to obtain their outputs. This is actually just shorthand for net.forward(X), a slick Python trick achieved via the Block class’s __call__ method.

net = nn.Sequential([nn.Dense(256), nn.relu, nn.Dense(10)])

# get_key is a d2l saved function returning jax.random.PRNGKey(random_seed)
X = jax.random.uniform(d2l.get_key(), (2, 20))
params = net.init(d2l.get_key(), X)
net.apply(params, X).shape
(2, 10)
net = tf.keras.models.Sequential([
  tf.keras.layers.Dense(256, activation=tf.nn.relu),
  tf.keras.layers.Dense(10),
])

X = tf.random.uniform((2, 20))
net(X).shape
TensorShape([2, 10])

In this example, we constructed our model by instantiating an keras.models.Sequential, with layers in the order that they should be executed passed as arguments. In short, Sequential defines a special kind of keras.Model, the class that presents a module in Keras. It maintains an ordered list of constituent Models. Note that each of the two fully connected layers is an instance of the Dense class which is itself a subclass of Model. The forward propagation (call) method is also remarkably simple: it chains each module in the list together, passing the output of each as input to the next. Note that until now, we have been invoking our models via the construction net(X) to obtain their outputs. This is actually just shorthand for net.call(X), a slick Python trick achieved via the module class’s __call__ method.

6.1.1. 自定義模塊

也許培養關于模塊如何工作的直覺的最簡單方法是我們自己實現一個。在我們實現自己的自定義模塊之前,我們先簡單總結一下每個模塊必須提供的基本功能:

  1. 攝取輸入數據作為其前向傳播方法的參數。

  2. 通過讓前向傳播方法返回一個值來生成輸出。請注意,輸出可能具有與輸入不同的形狀。例如,我們上面模型中的第一個全連接層接收任意維度的輸入,但返回 256 維度的輸出。

  3. 計算其輸出相對于其輸入的梯度,可以通過其反向傳播方法訪問。通常這會自動發生。

  4. 存儲并提供對執行前向傳播計算所需的那些參數的訪問。

  5. 根據需要初始化模型參數。

在下面的代碼片段中,我們從頭開始編寫一個模塊,對應于一個包含 256 個隱藏單元的隱藏層和一個 10 維輸出層的 MLP。請注意,MLP下面的類繼承了代表模塊的類。我們將嚴重依賴父類的方法,僅提供我們自己的構造函數(__init__ Python 中的方法)和前向傳播方法。

class MLP(nn.Module):
  def __init__(self):
    # Call the constructor of the parent class nn.Module to perform
    # the necessary initialization
    super().__init__()
    self.hidden = nn.LazyLinear(256)
    self.out = nn.LazyLinear(10)

  # Define the forward propagation of the model, that is, how to return the
  # required model output based on the input X
  def forward(self, X):
    return self.out(F.relu(self.hidden(X)))
class MLP(nn.Block):
  def __init__(self):
    # Call the constructor of the MLP parent class nn.Block to perform
    # the necessary initialization
    super().__init__()
    self.hidden = nn.Dense(256, activation='relu')
    self.out = nn.Dense(10)

  # Define the forward propagation of the model, that is, how to return the
  # required model output based on the input X
  def forward(self, X):
    return self.out(self.hidden(X))
class MLP(nn.Module):
  def setup(self):
    # Define the layers
    self.hidden = nn.Dense(256)
    self.out = nn.Dense(10)

  # Define the forward propagation of the model, that is, how to return the
  # required model output based on the input X
  def __call__(self, X):
    return self.out(nn.relu(self.hidden(X)))
class MLP(tf.keras.Model):
  def __init__(self):
    # Call the constructor of the parent class tf.keras.Model to perform
    # the necessary initialization
    super().__init__()
    self.hidden = tf.keras.layers.Dense(units=256, activation=tf.nn.relu)
    self.out = tf.keras.layers.Dense(units=10)

  # Define the forward propagation of the model, that is, how to return the
  # required model output based on the input X
  def call(self, X):
    return self.out(self.hidden((X)))

讓我們首先關注前向傳播方法。請注意,它以 X輸入為輸入,應用激活函數計算隱藏表示,并輸出其對數。在這個MLP 實現中,兩層都是實例變量。要了解為什么這是合理的,想象一下實例化兩個 MLPnet1net2,并在不同的數據上訓練它們。自然地,我們希望它們代表兩種不同的學習模型。

我們在構造函數中實例化 MLP 的層,隨后在每次調用前向傳播方法時調用這些層。注意幾個關鍵細節。首先,我們的自定義方法通過讓我們免于重述適用于大多數模塊的樣板代碼的痛苦來__init__調用父類的方法。然后我們實例化我們的兩個完全連接的層,將它們分配給 請注意,除非我們實現一個新層,否則我們不必擔心反向傳播方法或參數初始化。系統會自動生成這些方法。讓我們試試這個。__init__super().__init__()self.hidden


評論

查看更多

下載排行

本周

  1. 1Keysight B1500A 半導體器件分析儀用戶手冊、說明書 (中文)
  2. 19.00 MB  |  4次下載  |  免費
  3. 2使用TL431設計電源
  4. 0.67 MB   |  2次下載  |  免費
  5. 3BT134雙向可控硅手冊
  6. 1.74 MB   |  2次下載  |  1 積分
  7. 4一種新型高效率的服務器電源系統
  8. 0.85 MB   |  1次下載  |  1 積分
  9. 5LabVIEW環形控件
  10. 0.01 MB   |  1次下載  |  1 積分
  11. 6PR735,使用UCC28060的600W交錯式PFC轉換器
  12. 540.03KB   |  1次下載  |  免費
  13. 751單片機核心板原理圖
  14. 0.12 MB   |  1次下載  |  5 積分
  15. 8BP2879DB支持調光調滅的非隔離低 PF LED 驅動器
  16. 1.44 MB  |  1次下載  |  免費

本月

  1. 1開關電源設計原理手冊
  2. 1.83 MB   |  54次下載  |  免費
  3. 2FS5080E 5V升壓充電兩串鋰電池充電管理IC中文手冊
  4. 8.45 MB   |  23次下載  |  免費
  5. 3DMT0660數字萬用表產品說明書
  6. 0.70 MB   |  13次下載  |  免費
  7. 4UC3842/3/4/5電源管理芯片中文手冊
  8. 1.75 MB   |  12次下載  |  免費
  9. 5ST7789V2單芯片控制器/驅動器英文手冊
  10. 3.07 MB   |  11次下載  |  1 積分
  11. 6TPS54202H降壓轉換器評估模塊用戶指南
  12. 1.02MB   |  8次下載  |  免費
  13. 7STM32F101x8/STM32F101xB手冊
  14. 1.69 MB   |  8次下載  |  1 積分
  15. 8基于MSP430FR6043的超聲波氣體流量計快速入門指南
  16. 2.26MB   |  7次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935119次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
  4. 1.48MB  |  420061次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233084次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191367次下載  |  10 積分
  9. 5十天學會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183335次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81581次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73807次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65987次下載  |  10 積分
主站蜘蛛池模板: 国产婷婷色综合AV蜜臀AV| 中文字幕欧美一区| 色AV色婷婷96人妻久久久| 女人被躁到高潮嗷嗷叫小| 老师小扫货水能么多叫出来| 九九热免费在线观看| 精品无码一区二区三区中文字幕| 国产精品v欧美精品v日韩| 灌饱娇嫩H将军公主最新章节| 成人性生交大片免费看中文 | 肉动漫无修在线播放| 欧美性爱 先锋影音| 欧美亚洲另类热图| 欧美精品专区第1页| 嗯别插太快好深再深点| 欧美xxxav| 日本人吃奶玩奶虐乳| 全黄h全肉细节文在线观看| 热久久国产欧美一区二区精品| 人妻仑乱少妇88MAV| 97蜜桃网123| 坠落的丝袜美人妻| 97免费视频在线| jizz女学| 国产a在线不卡| 国产亚洲精品97在线视频一| 黑人巨茎大战白人女40CMO| 久久黄视频| 男人把女人桶到爽免费看视频| 欧美色偷偷亚洲天堂bt| 乳欲性高清在线| 小蝌蚪视频在线观看免费观看WWW| 亚洲AV无码乱码在线观看浪潮| 亚洲欧洲日产国产 最新| 中文字幕1| YELLOW视频直播在线观看高清| 富婆大保健嗷嗷叫普通话对白 | 影音先锋男人资源813.| 5566av资源| 范冰冰hdxxxx| 黄色a一级视频|