在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

PyTorch教程-6.1. 層和模塊

jf_pJlTbmA9 ? 來源:PyTorch ? 作者:PyTorch ? 2023-06-05 15:44 ? 次閱讀

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

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

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

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

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. 自定義模塊

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

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

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

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

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

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

在下面的代碼片段中,我們從頭開始編寫一個模塊,對應于一個包含 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 實現中,兩層都是實例變量。要了解為什么這是合理的,想象一下實例化兩個 MLPnet1和net2,并在不同的數據上訓練它們。自然地,我們希望它們代表兩種不同的學習模型。

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

net = MLP()
net(X).shape

torch.Size([2, 10])

net = MLP()
net.initialize()
net(X).shape

(2, 10)

net = MLP()
params = net.init(d2l.get_key(), X)
net.apply(params, X).shape

(2, 10)

net = MLP()
net(X).shape

TensorShape([2, 10])

模塊抽象的一個關鍵優點是它的多功能性。我們可以對模塊進行子類化以創建層(例如全連接層類)、整個模型(例如MLP上面的類)或中等復雜度的各種組件。我們將在接下來的章節中利用這種多功能性,例如在處理卷積神經網絡時。

6.1.2. 順序模塊

我們現在可以仔細看看這個Sequential類是如何工作的?;叵胍幌拢黃equential的設計目的是將其他模塊菊花鏈在一起。要構建我們自己的簡化版MySequential,我們只需要定義兩個關鍵方法:

一種將模塊逐個附加到列表的方法。

一種前向傳播方法,通過模塊鏈傳遞輸入,順序與附加順序相同。

以下MySequential類提供與默認Sequential類相同的功能。

class MySequential(nn.Module):
  def __init__(self, *args):
    super().__init__()
    for idx, module in enumerate(args):
      self.add_module(str(idx), module)

  def forward(self, X):
    for module in self.children():
      X = module(X)
    return X

在__init__方法中,我們通過調用方法來添加每個模塊 add_modules。稍后可以通過該方法訪問這些模塊 children。這樣系統就知道添加的模塊,并且會正確地初始化每個模塊的參數。

class MySequential(nn.Block):
  def add(self, block):
    # Here, block is an instance of a Block subclass, and we assume that
    # it has a unique name. We save it in the member variable _children of
    # the Block class, and its type is OrderedDict. When the MySequential
    # instance calls the initialize method, the system automatically
    # initializes all members of _children
    self._children[block.name] = block

  def forward(self, X):
    # OrderedDict guarantees that members will be traversed in the order
    # they were added
    for block in self._children.values():
      X = block(X)
    return X

The add method adds a single block to the ordered dictionary _children. You might wonder why every Gluon Block possesses a _children attribute and why we used it rather than just define a Python list ourselves. In short the chief advantage of _children is that during our block’s parameter initialization, Gluon knows to look inside the _children dictionary to find sub-blocks whose parameters also need to be initialized.

class MySequential(nn.Module):
  modules: List

  def __call__(self, X):
    for module in self.modules:
      X = module(X)
    return X

class MySequential(tf.keras.Model):
  def __init__(self, *args):
    super().__init__()
    self.modules = args

  def call(self, X):
    for module in self.modules:
      X = module(X)
    return X

當MySequential調用我們的前向傳播方法時,每個添加的模塊都按照添加的順序執行。我們現在可以使用我們的類重新實現 MLP MySequential。

net = MySequential(nn.LazyLinear(256), nn.ReLU(), nn.LazyLinear(10))
net(X).shape

torch.Size([2, 10])

net = MySequential()
net.add(nn.Dense(256, activation='relu'))
net.add(nn.Dense(10))
net.initialize()
net(X).shape

(2, 10)

net = MySequential([nn.Dense(256), nn.relu, nn.Dense(10)])
params = net.init(d2l.get_key(), X)
net.apply(params, X).shape

(2, 10)

net = MySequential(
  tf.keras.layers.Dense(units=256, activation=tf.nn.relu),
  tf.keras.layers.Dense(10))
net(X).shape

TensorShape([2, 10])

請注意,此用法MySequential與我們之前為該類編寫的代碼相同(如第 5.1 節Sequential所述 )。

6.1.3. 在前向傳播方法中執行代碼

該類Sequential使模型構建變得容易,使我們無需定義自己的類就可以組裝新的體系結構。然而,并非所有架構都是簡單的菊花鏈。當需要更大的靈活性時,我們會想要定義我們自己的塊。例如,我們可能希望在前向傳播方法中執行 Python 的控制流。此外,我們可能想要執行任意數學運算,而不是簡單地依賴于預定義的神經網絡層。

您可能已經注意到,直到現在,我們網絡中的所有操作都對我們網絡的激活及其參數起作用。然而,有時我們可能想要合并既不是前幾層結果也不是可更新參數的術語。我們稱這些 為常量參數。比如說我們想要一個計算函數的層 f(x,w)=c?w?x, 在哪里x是輸入,w是我們的參數,并且c是一些指定的常量,在優化期間不會更新。所以我們實現一個FixedHiddenMLP類如下。

class FixedHiddenMLP(nn.Module):
  def __init__(self):
    super().__init__()
    # Random weight parameters that will not compute gradients and
    # therefore keep constant during training
    self.rand_weight = torch.rand((20, 20))
    self.linear = nn.LazyLinear(20)

  def forward(self, X):
    X = self.linear(X)
    X = F.relu(X @ self.rand_weight + 1)
    # Reuse the fully connected layer. This is equivalent to sharing
    # parameters with two fully connected layers
    X = self.linear(X)
    # Control flow
    while X.abs().sum() > 1:
      X /= 2
    return X.sum()

class FixedHiddenMLP(nn.Block):
  def __init__(self):
    super().__init__()
    # Random weight parameters created with the get_constant method
    # are not updated during training (i.e., constant parameters)
    self.rand_weight = self.params.get_constant(
      'rand_weight', np.random.uniform(size=(20, 20)))
    self.dense = nn.Dense(20, activation='relu')

  def forward(self, X):
    X = self.dense(X)
    # Use the created constant parameters, as well as the relu and dot
    # functions
    X = npx.relu(np.dot(X, self.rand_weight.data()) + 1)
    # Reuse the fully connected layer. This is equivalent to sharing
    # parameters with two fully connected layers
    X = self.dense(X)
    # Control flow
    while np.abs(X).sum() > 1:
      X /= 2
    return X.sum()

class FixedHiddenMLP(nn.Module):
  # Random weight parameters that will not compute gradients and
  # therefore keep constant during training
  rand_weight: jnp.array = jax.random.uniform(d2l.get_key(), (20, 20))

  def setup(self):
    self.dense = nn.Dense(20)

  def __call__(self, X):
    X = self.dense(X)
    X = nn.relu(X @ self.rand_weight + 1)
    # Reuse the fully connected layer. This is equivalent to sharing
    # parameters with two fully connected layers
    X = self.dense(X)
    # Control flow
    while jnp.abs(X).sum() > 1:
      X /= 2
    return X.sum()

class FixedHiddenMLP(tf.keras.Model):
  def __init__(self):
    super().__init__()
    self.flatten = tf.keras.layers.Flatten()
    # Random weight parameters created with tf.constant are not updated
    # during training (i.e., constant parameters)
    self.rand_weight = tf.constant(tf.random.uniform((20, 20)))
    self.dense = tf.keras.layers.Dense(20, activation=tf.nn.relu)

  def call(self, inputs):
    X = self.flatten(inputs)
    # Use the created constant parameters, as well as the relu and
    # matmul functions
    X = tf.nn.relu(tf.matmul(X, self.rand_weight) + 1)
    # Reuse the fully connected layer. This is equivalent to sharing
    # parameters with two fully connected layers
    X = self.dense(X)
    # Control flow
    while tf.reduce_sum(tf.math.abs(X)) > 1:
      X /= 2
    return tf.reduce_sum(X)

在這個FixedHiddenMLP模型中,我們實現了一個隱藏層,其權重 ( self.rand_weight) 在實例化時隨機初始化,此后保持不變。該權重不是模型參數,因此永遠不會通過反向傳播更新。然后網絡將這個“固定”層的輸出傳遞給一個全連接層。

請注意,在返回輸出之前,我們的模型做了一些不尋常的事情。我們運行了一個 while 循環,測試它的條件?1范數大于1,并將我們的輸出向量除以2直到滿足條件。最后,我們返回了 中條目的總和X。據我們所知,沒有標準的神經網絡執行此操作。請注意,此特定操作可能對任何實際任務都沒有用。我們的目的只是向您展示如何將任意代碼集成到您的神經網絡計算流程中。

net = FixedHiddenMLP()
net(X)

tensor(-0.1058, grad_fn=)

net = FixedHiddenMLP()
net.initialize()
net(X)

array(0.52637565)

net = FixedHiddenMLP()
params = net.init(d2l.get_key(), X)
net.apply(params, X)

Array(-0.00932113, dtype=float32)

net = FixedHiddenMLP()
net(X)


我們可以混合搭配各種方式將模塊組裝在一起。在下面的示例中,我們以一些創造性的方式嵌套模塊。

class NestMLP(nn.Module):
  def __init__(self):
    super().__init__()
    self.net = nn.Sequential(nn.LazyLinear(64), nn.ReLU(),
                 nn.LazyLinear(32), nn.ReLU())
    self.linear = nn.LazyLinear(16)

  def forward(self, X):
    return self.linear(self.net(X))

chimera = nn.Sequential(NestMLP(), nn.LazyLinear(20), FixedHiddenMLP())
chimera(X)

tensor(0.0964, grad_fn=)

class NestMLP(nn.Block):
  def __init__(self, **kwargs):
    super().__init__(**kwargs)
    self.net = nn.Sequential()
    self.net.add(nn.Dense(64, activation='relu'),
           nn.Dense(32, activation='relu'))
    self.dense = nn.Dense(16, activation='relu')

  def forward(self, X):
    return self.dense(self.net(X))

chimera = nn.Sequential()
chimera.add(NestMLP(), nn.Dense(20), FixedHiddenMLP())
chimera.initialize()
chimera(X)

array(0.9772054)

class NestMLP(nn.Module):
  def setup(self):
    self.net = nn.Sequential([nn.Dense(64), nn.relu,
                 nn.Dense(32), nn.relu])
    self.dense = nn.Dense(16)

  def __call__(self, X):
    return self.dense(self.net(X))


chimera = nn.Sequential([NestMLP(), nn.Dense(20), FixedHiddenMLP()])
params = chimera.init(d2l.get_key(), X)
chimera.apply(params, X)

Array(0.20007098, dtype=float32)

class NestMLP(tf.keras.Model):
  def __init__(self):
    super().__init__()
    self.net = tf.keras.Sequential()
    self.net.add(tf.keras.layers.Dense(64, activation=tf.nn.relu))
    self.net.add(tf.keras.layers.Dense(32, activation=tf.nn.relu))
    self.dense = tf.keras.layers.Dense(16, activation=tf.nn.relu)

  def call(self, inputs):
    return self.dense(self.net(inputs))

chimera = tf.keras.Sequential()
chimera.add(NestMLP())
chimera.add(tf.keras.layers.Dense(20))
chimera.add(FixedHiddenMLP())
chimera(X)


6.1.4. 概括

層是模塊。許多層可以組成一個模塊。許多模塊可以組成一個模塊。

模塊可以包含代碼。模塊負責很多內部事務,包括參數初始化和反向傳播。層和模塊的順序連接由模塊處理Sequential 。

6.1.5. 練習

如果改用MySequentialPython列表存儲模塊會出現什么樣的問題?

實現一個將兩個模塊作為參數的模塊,比如 net1和net2并在前向傳播中返回兩個網絡的串聯輸出。這也稱為并行模塊。

假設您想要連接同一網絡的多個實例。實現一個工廠函數,生成同一模塊的多個實例,并從中構建一個更大的網絡。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • pytorch
    +關注

    關注

    2

    文章

    809

    瀏覽量

    13798
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    PyTorch如何入門

    PyTorch 入門實戰(一)——Tensor
    發表于 06-01 09:58

    Pytorch AI語音助手

    想做一個Pytorch AI語音助手,有沒有好的思路呀?
    發表于 03-06 13:00

    怎樣使用PyTorch Hub去加載YOLOv5模型

    在Python>=3.7.0環境中安裝requirements.txt,包括PyTorch>=1.7。模型和數據集從最新的 YOLOv5版本自動下載。簡單示例此示例從
    發表于 07-22 16:02

    如何往星光2板子里裝pytorch

    如題,想先gpu版本的pytorch只安裝cpu版本的pytorch,pytorch官網提供了基于conda和pip兩種安裝方式。因為咱是risc架構沒對應的conda,而使用pip安裝提示也沒有
    發表于 09-12 06:30

    SRWF-1(V6.1)無線模塊使用說明書

    SRWF-1(V6.1)無線模塊,很好的無線模塊資料,快來下載學習吧
    發表于 03-29 10:58 ?0次下載

    Caffe2 和 PyTorch 代碼合并旨為提高開發效率

    按照賈揚清的說法,Facebook 去年啟動 ONNX 項目并組建團隊時,就已經開始推動 Caffe2 和 PyTorch 在代碼的合并。
    的頭像 發表于 04-30 09:16 ?3635次閱讀

    基于PyTorch的深度學習入門教程之PyTorch簡單知識

    本文參考PyTorch官網的教程,分為五個基本模塊來介紹PyTorch。為了避免文章過長,這五個模塊分別在五篇博文中介紹。 Part1:PyTorc
    的頭像 發表于 02-16 15:20 ?2471次閱讀

    基于PyTorch的深度學習入門教程之PyTorch的自動梯度計算

    本文參考PyTorch官網的教程,分為五個基本模塊來介紹PyTorch。為了避免文章過長,這五個模塊分別在五篇博文中介紹。 Part1:PyTorc
    的頭像 發表于 02-16 15:26 ?2246次閱讀

    基于PyTorch的深度學習入門教程之使用PyTorch構建一個神經網絡

    ? ? ? ? 前言 本文參考PyTorch官網的教程,分為五個基本模塊來介紹PyTorch。為了避免文章過長,這五個模塊分別在五篇博文中介紹。 Part1:
    的頭像 發表于 02-15 09:40 ?2297次閱讀

    基于PyTorch的深度學習入門教程之PyTorch重點綜合實踐

    實例。該網絡有一個隱含,使用梯度下降來訓練,目標是最小化網絡輸出和真實輸出之間的歐氏距離。 目錄 Tensors(張量) Warm-up:numpy PyTorch:Tensors Autograd
    的頭像 發表于 02-15 10:01 ?2049次閱讀

    PyTorch中使用ReLU激活函數的例子

    PyTorch已為我們實現了大多數常用的非線性激活函數,我們可以像使用任何其他的那樣使用它們。讓我們快速看一個在PyTorch中使用ReLU激活函數的例子:
    的頭像 發表于 07-06 15:27 ?2765次閱讀

    PyTorch教程6.1模塊

    電子發燒友網站提供《PyTorch教程6.1模塊.pdf》資料免費下載
    發表于 06-05 15:23 ?0次下載
    <b class='flag-5'>PyTorch</b>教程<b class='flag-5'>6.1</b>之<b class='flag-5'>層</b>和<b class='flag-5'>模塊</b>

    PyTorch教程7.1之從全連接到卷積

    電子發燒友網站提供《PyTorch教程7.1之從全連接到卷積.pdf》資料免費下載
    發表于 06-05 11:50 ?0次下載
    <b class='flag-5'>PyTorch</b>教程7.1之從全連接<b class='flag-5'>層</b>到卷積

    PyTorch神經網絡模型構建過程

    PyTorch,作為一個廣泛使用的開源深度學習庫,提供了豐富的工具和模塊,幫助開發者構建、訓練和部署神經網絡模型。在神經網絡模型中,輸出是尤為關鍵的部分,它負責將模型的預測結果以合適的形式輸出。以下將詳細解析
    的頭像 發表于 07-10 14:57 ?855次閱讀

    PyTorch 數據加載與處理方法

    ,數據加載主要依賴于 torch.utils.data 模塊,該模塊提供了 Dataset 和 DataLoader 兩個核心類。 1.1 Dataset 類 Dataset 類是 PyTorch 中所
    的頭像 發表于 11-05 17:37 ?880次閱讀
    主站蜘蛛池模板: 亚洲午夜精品一区二区 | 日本一卡二卡3卡四卡网站精品 | 国产91色综合久久免费分享 | 国产日韩精品欧美一区色 | 女的扒开尿口让男人桶爽 | 亚洲午夜久久久久国产 | 天堂网在线www资源在线 | 亚洲欧美在线一区二区 | 天天射天天干天天色 | 女人午夜啪啪性刺激免费看 | 中文免费观看视频网站 | 亚洲国产女人aaa毛片在线 | 五月天天色 | 亚洲一区二区福利视频 | 成人a毛片视频免费看 | 91激情网 | 福利片网站 | 一区二区三区四区视频在线 | 精品噜噜噜噜久久久久久久久 | 手机看片福利盒子久久 | 三级国产在线观看 | 欧美日韩亚洲色图 | 免费一级毛片女人图片 | 国产成人啪精品午夜在线播放 | 天堂视频在线 | 国产91色综合久久免费分享 | 婷婷六月天在线 | 97精品在线| 亚洲一区二区三区在线 | 久久精品成人免费网站 | 免费一级毛毛片 | 深夜在线观看大尺度 | bt天堂新版中文在线地址 | 永久免费精品影视网站 | 长腿丝袜美女被啪啪 | 午夜在线视频国产 | 成人免费视频一区二区三区 | 一级片观看 | 三级三级三级网站网址 | 欧美激欧美啪啪片免费看 | 黄色大片网 |