那曲檬骨新材料有限公司

電子發燒友App

硬聲App

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

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

3天內不再提示
電子發燒友網>電子資料下載>電子資料>PyTorch教程5.2之多層感知器的實現

PyTorch教程5.2之多層感知器的實現

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

資料介紹

多層感知器 (MLP) 的實現并不比簡單的線性模型復雜多少。關鍵的概念差異是我們現在連接多個層。

import torch
from torch import nn
from d2l import torch as d2l
from mxnet import np, npx
from mxnet.gluon import nn
from d2l import mxnet as d2l

npx.set_np()
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
from d2l import tensorflow as d2l

5.2.1. 從零開始實施

讓我們從頭開始實現這樣一個網絡

5.2.1.1. 初始化模型參數

回想一下,Fashion-MNIST 包含 10 個類,并且每個圖像由一個28×28=784灰度像素值網格。和以前一樣,我們暫時忽略像素之間的空間結構,因此我們可以將其視為具有 784 個輸入特征和 10 個類別的分類數據集。首先,我們將實現一個具有一個隱藏層和 256 個隱藏單元的 MLP。層數和寬度都是可調的(它們被認為是超參數)。通常,我們選擇層寬度可以被 2 的較大次冪整除。由于內存在硬件中分配和尋址的方式,這在計算上是高效的。

同樣,我們將用幾個張量表示我們的參數。請注意, 對于每一層,我們必須跟蹤一個權重矩陣和一個偏置向量。與往常一樣,我們為這些參數的損失梯度分配內存。

在下面的代碼中,我們使用 `nn.Parameter< https://pytorch.org/docs/stable/generated/torch.nn.parameter.Parameter.html >`__ 自動將類屬性注冊為要跟蹤的參數autograd第 2.5 節) .

class MLPScratch(d2l.Classifier):
  def __init__(self, num_inputs, num_outputs, num_hiddens, lr, sigma=0.01):
    super().__init__()
    self.save_hyperparameters()
    self.W1 = nn.Parameter(torch.randn(num_inputs, num_hiddens) * sigma)
    self.b1 = nn.Parameter(torch.zeros(num_hiddens))
    self.W2 = nn.Parameter(torch.randn(num_hiddens, num_outputs) * sigma)
    self.b2 = nn.Parameter(torch.zeros(num_outputs))

In the code below, we first define and initialize the parameters and then enable gradient tracking.

class MLPScratch(d2l.Classifier):
  def __init__(self, num_inputs, num_outputs, num_hiddens, lr, sigma=0.01):
    super().__init__()
    self.save_hyperparameters()
    self.W1 = np.random.randn(num_inputs, num_hiddens) * sigma
    self.b1 = np.zeros(num_hiddens)
    self.W2 = np.random.randn(num_hiddens, num_outputs) * sigma
    self.b2 = np.zeros(num_outputs)
    for param in self.get_scratch_params():
      param.attach_grad()

In the code below we use `flax.linen.Module.param <https://flax.readthedocs.io/en/latest/api_reference/flax.linen.html#flax.linen.Module.param>`__ to define the model parameter.

class MLPScratch(d2l.Classifier):
  num_inputs: int
  num_outputs: int
  num_hiddens: int
  lr: float
  sigma: float = 0.01

  def setup(self):
    self.W1 = self.param('W1', nn.initializers.normal(self.sigma),
               (self.num_inputs, self.num_hiddens))
    self.b1 = self.param('b1', nn.initializers.zeros, self.num_hiddens)
    self.W2 = self.param('W2', nn.initializers.normal(self.sigma),
               (self.num_hiddens, self.num_outputs))
    self.b2 = self.param('b2', nn.initializers.zeros, self.num_outputs)

In the code below we use `tf.Variable <https://www.tensorflow.org/api_docs/python/tf/Variable>`__ to define the model parameter.

class MLPScratch(d2l.Classifier):
  def __init__(self, num_inputs, num_outputs, num_hiddens, lr, sigma=0.01):
    super().__init__()
    self.save_hyperparameters()
    self.W1 = tf.Variable(
      tf.random.normal((num_inputs, num_hiddens)) * sigma)
    self.b1 = tf.Variable(tf.zeros(num_hiddens))
    self.W2 = tf.Variable(
      tf.random.normal((num_hiddens, num_outputs)) * sigma)
    self.b2 = tf.Variable(tf.zeros(num_outputs))

5.2.1.2. 模型

為了確保我們知道一切是如何工作的,我們將自己實現 ReLU 激活,而不是直接調用內置relu函數。

def relu(X):
  a = torch.zeros_like(X)
  return torch.max(X, a)
def relu(X):
  return np.maximum(X, 0)
def relu(X):
  return jnp.maximum(X, 0)
def relu(X):
  return tf.math.maximum(X, 0)

由于我們忽略了空間結構,我們將reshape每個二維圖像轉換為長度為 的平面向量num_inputs最后,我們只用幾行代碼就實現了我們的模型。由于我們使用框架內置的 autograd,這就是它所需要的全部。

@d2l.add_to_class(MLPScratch)
def forward(self, X):
  X = X.reshape((-1, self.num_inputs))
  H = relu(torch.matmul(X, self.W1) + self.b1)
  return torch.matmul(H, self.W2) + self.b2
@d2l.add_to_class(MLPScratch)
def forward(self, X):
  X = X.reshape((-1, self.num_inputs))
  H = relu(np.dot(X, self.W1) + self.b1)
  return np.dot(H, self.W2) + self.b2
@d2l.add_to_class(MLPScratch)
def forward(self, X):
  X = X.reshape((-1, self.num_inputs))
  H = relu(jnp.matmul(X, self.W1) + self.b1)
  return jnp.matmul(H, self.W2) + self.b2
@d2l.add_to_class(MLPScratch)
def forward(self, X):
  X = tf.reshape(X, (-1, self.num_inputs))
  H = relu(tf.matmul(X, self.W1) + self.b1)
  return tf.matmul(H, self.W2) + self.b2

5.2.1.3. 訓練

幸運的是,MLP 的訓練循環與 softmax 回歸完全相同。我們定義模型、數據、訓練器,最后fit在模型和數據上調用方法。


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1A7159和A7139射頻芯片的資料免費下載
  2. 0.20 MB   |  55次下載  |  5 積分
  3. 2PIC12F629/675 數據手冊免費下載
  4. 2.38 MB   |  36次下載  |  5 積分
  5. 3PIC16F716 數據手冊免費下載
  6. 2.35 MB   |  18次下載  |  5 積分
  7. 4dsPIC33EDV64MC205電機控制開發板用戶指南
  8. 5.78MB   |  8次下載  |  免費
  9. 5STC15系列常用寄存器匯總免費下載
  10. 1.60 MB   |  7次下載  |  5 積分
  11. 6模擬電路仿真實現
  12. 2.94MB   |  4次下載  |  免費
  13. 7PCB圖繪制實例操作
  14. 2.92MB   |  2次下載  |  免費
  15. 8零死角玩轉STM32F103—指南者
  16. 26.78 MB   |  1次下載  |  1 積分

本月

  1. 1ADI高性能電源管理解決方案
  2. 2.43 MB   |  452次下載  |  免費
  3. 2免費開源CC3D飛控資料(電路圖&PCB源文件、BOM、
  4. 5.67 MB   |  141次下載  |  1 積分
  5. 3基于STM32單片機智能手環心率計步器體溫顯示設計
  6. 0.10 MB   |  137次下載  |  免費
  7. 4A7159和A7139射頻芯片的資料免費下載
  8. 0.20 MB   |  55次下載  |  5 積分
  9. 5PIC12F629/675 數據手冊免費下載
  10. 2.38 MB   |  36次下載  |  5 積分
  11. 6如何正確測試電源的紋波
  12. 0.36 MB   |  19次下載  |  免費
  13. 7PIC16F716 數據手冊免費下載
  14. 2.35 MB   |  18次下載  |  5 積分
  15. 8Q/SQR E8-4-2024乘用車電子電器零部件及子系統EMC試驗方法及要求
  16. 1.97 MB   |  8次下載  |  10 積分

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935121次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
  4. 1.48MB  |  420062次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233088次下載  |  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  |  73810次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65988次下載  |  10 積分
百家乐官网海滨网现场| 百家乐官网赢钱打| 威尼斯人娱乐城首存| 龙博百家乐官网的玩法技巧和规则| 微博| 大发888更名网址| 百家乐筹码防伪定制| 皇室百家乐官网的玩法技巧和规则| 百家乐官网赢新全讯网| 凯旋国际| 德州扑克在线玩| 太阳城团购| 百家乐赌博规律| 百家乐官网园首选| 百家乐官网龙虎台布多少钱| 航空| 景谷| 足球博彩网| 娱乐城注册送彩金100| 大发888-娱乐场| 永利高投注网哪个好| 新时代百家乐的玩法技巧和规则| 百家乐发牌器8副| 大佬百家乐官网的玩法技巧和规则 | 免水百家乐的玩法技巧和规则| 百家乐投注翻倍方法| 大发百家乐官网的玩法技巧和规则 | 大发888下载地址| 江西老虎机遥控器| 大发888玩家论坛| 大发888充值平台| 网上现金棋牌游戏| 大发888网页版游戏| 威尼斯人娱乐场 新葡京| 电玩百家乐的玩法技巧和规则| 百家乐官网平注法口诀| 百家乐官网游戏全讯网2| 香港六合彩图库| 桑植县| 百家乐官网神仙道官网| 汉沽区|