99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

PyTorch教程-8.7. 密集連接網(wǎng)絡(luò) (DenseNet)

jf_pJlTbmA9 ? 來(lái)源:PyTorch ? 作者:PyTorch ? 2023-06-05 15:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

ResNet 顯著改變了如何在深度網(wǎng)絡(luò)中參數(shù)化函數(shù)的觀點(diǎn)。DenseNet(密集卷積網(wǎng)絡(luò))在某種程度上是對(duì)此的邏輯延伸 (Huang et al. , 2017)。DenseNet 的特點(diǎn)是每一層都連接到所有前面的層的連接模式和連接操作(而不是 ResNet 中的加法運(yùn)算符)以保留和重用早期層的特征。要了解如何得出它,讓我們稍微繞道數(shù)學(xué)。

import torch
from torch import nn
from d2l import torch as d2l

from mxnet import init, 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

import tensorflow as tf
from d2l import tensorflow as d2l

8.7.1. 從 ResNet 到 DenseNet

回憶一下函數(shù)的泰勒展開(kāi)式。對(duì)于這一點(diǎn)x=0 它可以寫(xiě)成

(8.7.1)f(x)=f(0)+x?[f′(0)+x?[f″(0)2!+x?[f?(0)3!+…]]].

關(guān)鍵是它將函數(shù)分解為越來(lái)越高階的項(xiàng)。同樣,ResNet 將函數(shù)分解為

(8.7.2)f(x)=x+g(x).

也就是說(shuō),ResNet分解f分為一個(gè)簡(jiǎn)單的線(xiàn)性項(xiàng)和一個(gè)更復(fù)雜的非線(xiàn)性項(xiàng)。如果我們想捕獲(不一定要添加)兩個(gè)術(shù)語(yǔ)以外的信息怎么辦?一種這樣的解決方案是 DenseNet (Huang等人,2017 年)。

poYBAGR9Ne2AS2zdAAAtlyxWZMM335.svg

圖 8.7.1 ResNet(左)和 DenseNet(右)在跨層連接中的主要區(qū)別:加法的使用和連接的使用。

如圖 8.7.1所示,ResNet 和 DenseNet 的主要區(qū)別在于后者的輸出是 連接的(表示為[,]) 而不是添加。結(jié)果,我們從x在應(yīng)用越來(lái)越復(fù)雜的函數(shù)序列后,它的值:

(8.7.3)x→[x,f1(x),f2([x,f1(x)]),f3([x,f1(x),f2([x,f1(x)])]),…].

最后,將所有這些功能組合在 MLP 中,再次減少特征數(shù)量。就實(shí)現(xiàn)而言,這非常簡(jiǎn)單:我們不是添加術(shù)語(yǔ),而是將它們連接起來(lái)。DenseNet 這個(gè)名字源于變量之間的依賴(lài)圖變得非常密集這一事實(shí)。這種鏈的最后一層與前面的所有層緊密相連。密集連接如圖 8.7.2所示 。

pYYBAGR9Ne-AInwAAABmDzH7OvY343.svg

圖 8.7.2 DenseNet 中的密集連接。注意維度如何隨著深度增加。

構(gòu)成 DenseNet 的主要組件是密集塊和 過(guò)渡層。前者定義輸入和輸出如何連接,而后者控制通道的數(shù)量,使其不會(huì)太大,因?yàn)閿U(kuò)展 x→[x,f1(x),f2([x,f1(x)]),…] 可以是相當(dāng)高維的。

8.7.2. 密集塊

DenseNet 使用改進(jìn)的 ResNet 的“批量歸一化、激活和卷積”結(jié)構(gòu)(參見(jiàn)第 8.6 節(jié)中的練習(xí) )。首先,我們實(shí)現(xiàn)這個(gè)卷積塊結(jié)構(gòu)。

def conv_block(num_channels):
  return nn.Sequential(
    nn.LazyBatchNorm2d(), nn.ReLU(),
    nn.LazyConv2d(num_channels, kernel_size=3, padding=1))

def conv_block(num_channels):
  blk = nn.Sequential()
  blk.add(nn.BatchNorm(),
      nn.Activation('relu'),
      nn.Conv2D(num_channels, kernel_size=3, padding=1))
  return blk

class ConvBlock(nn.Module):
  num_channels: int
  training: bool = True

  @nn.compact
  def __call__(self, X):
    Y = nn.relu(nn.BatchNorm(not self.training)(X))
    Y = nn.Conv(self.num_channels, kernel_size=(3, 3), padding=(1, 1))(Y)
    Y = jnp.concatenate((X, Y), axis=-1)
    return Y

class ConvBlock(tf.keras.layers.Layer):
  def __init__(self, num_channels):
    super(ConvBlock, self).__init__()
    self.bn = tf.keras.layers.BatchNormalization()
    self.relu = tf.keras.layers.ReLU()
    self.conv = tf.keras.layers.Conv2D(
      filters=num_channels, kernel_size=(3, 3), padding='same')

    self.listLayers = [self.bn, self.relu, self.conv]

  def call(self, x):
    y = x
    for layer in self.listLayers.layers:
      y = layer(y)
    y = tf.keras.layers.concatenate([x,y], axis=-1)
    return y

密集塊由多個(gè)卷積塊組成,每個(gè)卷積塊使用相同數(shù)量的輸出通道。然而,在前向傳播中,我們?cè)谕ǖ谰S度上連接每個(gè)卷積塊的輸入和輸出。惰性評(píng)估允許我們自動(dòng)調(diào)整維度。

class DenseBlock(nn.Module):
  def __init__(self, num_convs, num_channels):
    super(DenseBlock, self).__init__()
    layer = []
    for i in range(num_convs):
      layer.append(conv_block(num_channels))
    self.net = nn.Sequential(*layer)

  def forward(self, X):
    for blk in self.net:
      Y = blk(X)
      # Concatenate input and output of each block along the channels
      X = torch.cat((X, Y), dim=1)
    return X

class DenseBlock(nn.Block):
  def __init__(self, num_convs, num_channels):
    super().__init__()
    self.net = nn.Sequential()
    for _ in range(num_convs):
      self.net.add(conv_block(num_channels))

  def forward(self, X):
    for blk in self.net:
      Y = blk(X)
      # Concatenate input and output of each block along the channels
      X = np.concatenate((X, Y), axis=1)
    return X

class DenseBlock(nn.Module):
  num_convs: int
  num_channels: int
  training: bool = True

  def setup(self):
    layer = []
    for i in range(self.num_convs):
      layer.append(ConvBlock(self.num_channels, self.training))
    self.net = nn.Sequential(layer)

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

class DenseBlock(tf.keras.layers.Layer):
  def __init__(self, num_convs, num_channels):
    super(DenseBlock, self).__init__()
    self.listLayers = []
    for _ in range(num_convs):
      self.listLayers.append(ConvBlock(num_channels))

  def call(self, x):
    for layer in self.listLayers.layers:
      x = layer(x)
    return x

在下面的示例中,我們定義了一個(gè)DenseBlock具有 10 個(gè)輸出通道的 2 個(gè)卷積塊的實(shí)例。當(dāng)使用 3 個(gè)通道的輸入時(shí),我們將得到一個(gè)輸出3+10+10=23渠道。卷積塊通道數(shù)控制輸出通道數(shù)相對(duì)于輸入通道數(shù)的增長(zhǎng)。這也稱(chēng)為增長(zhǎng)率。

blk = DenseBlock(2, 10)
X = torch.randn(4, 3, 8, 8)
Y = blk(X)
Y.shape

torch.Size([4, 23, 8, 8])

blk = DenseBlock(2, 10)
X = np.random.uniform(size=(4, 3, 8, 8))
blk.initialize()
Y = blk(X)
Y.shape

(4, 23, 8, 8)

blk = DenseBlock(2, 10)
X = jnp.zeros((4, 8, 8, 3))
Y = blk.init_with_output(d2l.get_key(), X)[0]
Y.shape

(4, 8, 8, 23)

blk = DenseBlock(2, 10)
X = tf.random.uniform((4, 8, 8, 3))
Y = blk(X)
Y.shape

TensorShape([4, 8, 8, 23])

8.7.3. 過(guò)渡層

由于每個(gè)密集塊都會(huì)增加通道的數(shù)量,因此添加太多通道會(huì)導(dǎo)致模型過(guò)于復(fù)雜。過(guò)渡層用于控制模型的復(fù)雜性。它通過(guò)使用一個(gè)減少通道的數(shù)量1×1卷積。此外,它通過(guò)步幅為 2 的平均池將高度和寬度減半。

def transition_block(num_channels):
  return nn.Sequential(
    nn.LazyBatchNorm2d(), nn.ReLU(),
    nn.LazyConv2d(num_channels, kernel_size=1),
    nn.AvgPool2d(kernel_size=2, stride=2))

def transition_block(num_channels):
  blk = nn.Sequential()
  blk.add(nn.BatchNorm(), nn.Activation('relu'),
      nn.Conv2D(num_channels, kernel_size=1),
      nn.AvgPool2D(pool_size=2, strides=2))
  return blk

class TransitionBlock(nn.Module):
  num_channels: int
  training: bool = True

  @nn.compact
  def __call__(self, X):
    X = nn.BatchNorm(not self.training)(X)
    X = nn.relu(X)
    X = nn.Conv(self.num_channels, kernel_size=(1, 1))(X)
    X = nn.avg_pool(X, window_shape=(2, 2), strides=(2, 2))
    return X

class TransitionBlock(tf.keras.layers.Layer):
  def __init__(self, num_channels, **kwargs):
    super(TransitionBlock, self).__init__(**kwargs)
    self.batch_norm = tf.keras.layers.BatchNormalization()
    self.relu = tf.keras.layers.ReLU()
    self.conv = tf.keras.layers.Conv2D(num_channels, kernel_size=1)
    self.avg_pool = tf.keras.layers.AvgPool2D(pool_size=2, strides=2)

  def call(self, x):
    x = self.batch_norm(x)
    x = self.relu(x)
    x = self.conv(x)
    return self.avg_pool(x)

將具有 10 個(gè)通道的過(guò)渡層應(yīng)用于前面示例中的密集塊的輸出。這將輸出通道的數(shù)量減少到 10,并將高度和寬度減半。

blk = transition_block(10)
blk(Y).shape

torch.Size([4, 10, 4, 4])

blk = transition_block(10)
blk.initialize()
blk(Y).shape

(4, 10, 4, 4)

blk = TransitionBlock(10)
blk.init_with_output(d2l.get_key(), Y)[0].shape

(4, 4, 4, 10)

blk = TransitionBlock(10)
blk(Y).shape

TensorShape([4, 4, 4, 10])

8.7.4. DenseNet 模型

接下來(lái),我們將構(gòu)建一個(gè) DenseNet 模型。DenseNet 首先使用與 ResNet 中相同的單卷積層和最大池化層。

class DenseNet(d2l.Classifier):
  def b1(self):
    return nn.Sequential(
      nn.LazyConv2d(64, kernel_size=7, stride=2, padding=3),
      nn.LazyBatchNorm2d(), nn.ReLU(),
      nn.MaxPool2d(kernel_size=3, stride=2, padding=1))

class DenseNet(d2l.Classifier):
  def b1(self):
    net = nn.Sequential()
    net.add(nn.Conv2D(64, kernel_size=7, strides=2, padding=3),
      nn.BatchNorm(), nn.Activation('relu'),
      nn.MaxPool2D(pool_size=3, strides=2, padding=1))
    return net

class DenseNet(d2l.Classifier):
  num_channels: int = 64
  growth_rate: int = 32
  arch: tuple = (4, 4, 4, 4)
  lr: float = 0.1
  num_classes: int = 10
  training: bool = True

  def setup(self):
    self.net = self.create_net()

  def b1(self):
    return nn.Sequential([
      nn.Conv(64, kernel_size=(7, 7), strides=(2, 2), padding='same'),
      nn.BatchNorm(not self.training),
      nn.relu,
      lambda x: nn.max_pool(x, window_shape=(3, 3),
                 strides=(2, 2), padding='same')
    ])

class DenseNet(d2l.Classifier):
  def b1(self):
    return tf.keras.models.Sequential([
      tf.keras.layers.Conv2D(
        64, kernel_size=7, strides=2, padding='same'),
      tf.keras.layers.BatchNormalization(),
      tf.keras.layers.ReLU(),
      tf.keras.layers.MaxPool2D(
        pool_size=3, strides=2, padding='same')])

然后,類(lèi)似于 ResNet 使用的由殘差塊組成的四個(gè)模塊,DenseNet 使用四個(gè)密集塊。與 ResNet 類(lèi)似,我們可以設(shè)置每個(gè)密集塊中使用的卷積層數(shù)。這里,我們?cè)O(shè)置為4,與8.6節(jié)中的ResNet-18模型一致。此外,我們將密集塊中卷積層的通道數(shù)(即增長(zhǎng)率)設(shè)置為 32,因此每個(gè)密集塊將添加 128 個(gè)通道。

在 ResNet 中,每個(gè)模塊之間的高度和寬度通過(guò)步長(zhǎng)為 2 的殘差塊減少。這里,我們使用過(guò)渡層將高度和寬度減半,并將通道數(shù)減半。與 ResNet 類(lèi)似,在最后連接一個(gè)全局池化層和一個(gè)全連接層以產(chǎn)生輸出。

@d2l.add_to_class(DenseNet)
def __init__(self, num_channels=64, growth_rate=32, arch=(4, 4, 4, 4),
       lr=0.1, num_classes=10):
  super(DenseNet, self).__init__()
  self.save_hyperparameters()
  self.net = nn.Sequential(self.b1())
  for i, num_convs in enumerate(arch):
    self.net.add_module(f'dense_blk{i+1}', DenseBlock(num_convs,
                             growth_rate))
    # The number of output channels in the previous dense block
    num_channels += num_convs * growth_rate
    # A transition layer that halves the number of channels is added
    # between the dense blocks
    if i != len(arch) - 1:
      num_channels //= 2
      self.net.add_module(f'tran_blk{i+1}', transition_block(
        num_channels))
  self.net.add_module('last', nn.Sequential(
    nn.LazyBatchNorm2d(), nn.ReLU(),
    nn.AdaptiveAvgPool2d((1, 1)), nn.Flatten(),
    nn.LazyLinear(num_classes)))
  self.net.apply(d2l.init_cnn)

@d2l.add_to_class(DenseNet)
def __init__(self, num_channels=64, growth_rate=32, arch=(4, 4, 4, 4),
       lr=0.1, num_classes=10):
  super(DenseNet, self).__init__()
  self.save_hyperparameters()
  self.net = nn.Sequential()
  self.net.add(self.b1())
  for i, num_convs in enumerate(arch):
    self.net.add(DenseBlock(num_convs, growth_rate))
    # The number of output channels in the previous dense block
    num_channels += num_convs * growth_rate
    # A transition layer that halves the number of channels is added
    # between the dense blocks
    if i != len(arch) - 1:
      num_channels //= 2
      self.net.add(transition_block(num_channels))
  self.net.add(nn.BatchNorm(), nn.Activation('relu'),
         nn.GlobalAvgPool2D(), nn.Dense(num_classes))
  self.net.initialize(init.Xavier())

@d2l.add_to_class(DenseNet)
def create_net(self):
  net = self.b1()
  for i, num_convs in enumerate(self.arch):
    net.layers.extend([DenseBlock(num_convs, self.growth_rate,
                   training=self.training)])
    # The number of output channels in the previous dense block
    num_channels = self.num_channels + (num_convs * self.growth_rate)
    # A transition layer that halves the number of channels is added
    # between the dense blocks
    if i != len(self.arch) - 1:
      num_channels //= 2
      net.layers.extend([TransitionBlock(num_channels,
                        training=self.training)])
  net.layers.extend([
    nn.BatchNorm(not self.training),
    nn.relu,
    lambda x: nn.avg_pool(x, window_shape=x.shape[1:3],
               strides=x.shape[1:3], padding='valid'),
    lambda x: x.reshape((x.shape[0], -1)),
    nn.Dense(self.num_classes)
  ])
  return net

@d2l.add_to_class(DenseNet)
def __init__(self, num_channels=64, growth_rate=32, arch=(4, 4, 4, 4),
       lr=0.1, num_classes=10):
  super(DenseNet, self).__init__()
  self.save_hyperparameters()
  self.net = tf.keras.models.Sequential(self.b1())
  for i, num_convs in enumerate(arch):
    self.net.add(DenseBlock(num_convs, growth_rate))
    # The number of output channels in the previous dense block
    num_channels += num_convs * growth_rate
    # A transition layer that halves the number of channels is added
    # between the dense blocks
    if i != len(arch) - 1:
      num_channels //= 2
      self.net.add(TransitionBlock(num_channels))
  self.net.add(tf.keras.models.Sequential([
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.ReLU(),
    tf.keras.layers.GlobalAvgPool2D(),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(num_classes)]))

8.7.5. 訓(xùn)練

由于我們?cè)谶@里使用更深的網(wǎng)絡(luò),在本節(jié)中,我們將輸入的高度和寬度從 224 減少到 96 以簡(jiǎn)化計(jì)算。

model = DenseNet(lr=0.01)
trainer = d2l.Trainer(max_epochs=10, num_gpus=1)
data = d2l.FashionMNIST(batch_size=128, resize=(96, 96))
trainer.fit(model, data)

poYBAGR9NfGAZbvmAAGACD91fnk292.svg

model = DenseNet(lr=0.01)
trainer = d2l.Trainer(max_epochs=10, num_gpus=1)
data = d2l.FashionMNIST(batch_size=128, resize=(96, 96))
trainer.fit(model, data)

pYYBAGR9NfSAPb7eAAF-EuBmwRM257.svg

model = DenseNet(lr=0.01)
trainer = d2l.Trainer(max_epochs=10, num_gpus=1)
data = d2l.FashionMNIST(batch_size=128, resize=(96, 96))
trainer.fit(model, data)

pYYBAGR9NfaAKu4tAAF9G6eVzq4572.svg

trainer = d2l.Trainer(max_epochs=10)
data = d2l.FashionMNIST(batch_size=128, resize=(96, 96))
with d2l.try_gpu():
  model = DenseNet(lr=0.01)
  trainer.fit(model, data)

poYBAGR9NfiAVfvuAAF1jb_MRPQ814.svg

8.7.6. 總結(jié)與討論

構(gòu)成 DenseNet 的主要組件是密集塊和過(guò)渡層。對(duì)于后者,我們需要在組成網(wǎng)絡(luò)時(shí)通過(guò)添加再次縮小通道數(shù)量的過(guò)渡層來(lái)控制維數(shù)。在跨層連接方面,不同于ResNet將輸入和輸出相加,DenseNet是在通道維度上拼接輸入和輸出。雖然這些連接操作重用特征來(lái)實(shí)現(xiàn)計(jì)算效率,但不幸的是它們會(huì)導(dǎo)致大量的 GPU 內(nèi)存消耗。因此,應(yīng)用 DenseNet 可能需要更高效的內(nèi)存實(shí)現(xiàn),這可能會(huì)增加訓(xùn)練時(shí)間 (Pleiss等人,2017 年)。

8.7.7. 練習(xí)

為什么我們?cè)谶^(guò)渡層使用平均池而不是最大池?

DenseNet 論文中提到的優(yōu)點(diǎn)之一是其模型參數(shù)比 ResNet 小。為什么會(huì)這樣?

DenseNet 被詬病的一個(gè)問(wèn)題是它的高內(nèi)存消耗。

真的是這樣嗎?嘗試將輸入形狀更改為 224×224憑經(jīng)驗(yàn)查看實(shí)際的 GPU 內(nèi)存消耗。

你能想到減少內(nèi)存消耗的替代方法嗎?您需要如何更改框架?

實(shí)施 DenseNet 論文(Huang等人,2017 年)表 1 中提供的各種 DenseNet 版本。

應(yīng)用 DenseNet 思想設(shè)計(jì)基于 MLP 的模型。將其應(yīng)用于第 5.7 節(jié)中的房?jī)r(jià)預(yù)測(cè)任務(wù)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    【Milk-V Duo 開(kāi)發(fā)板免費(fèi)體驗(yàn)】學(xué)習(xí):基于Duo開(kāi)發(fā)板的Densenet圖像分類(lèi)

    densenet121 //網(wǎng)絡(luò)不佳可能導(dǎo)致densenet-12.tar.gz下載失敗,可使用下方的離線(xiàn)附件 $ wget https://github.com/onnx/models/raw/main
    發(fā)表于 08-19 22:44

    使用加權(quán)密集連接卷積網(wǎng)絡(luò)的深度強(qiáng)化學(xué)習(xí)方法說(shuō)明

    針對(duì)深度強(qiáng)化學(xué)習(xí)中卷積神經(jīng)網(wǎng)絡(luò)(CNN)層數(shù)過(guò)深導(dǎo)致的梯度消失問(wèn)題,提出一種將密集連接卷積網(wǎng)絡(luò)應(yīng)用于強(qiáng)化學(xué)習(xí)的方法。首先,利用密集
    發(fā)表于 01-23 10:41 ?3次下載
    使用加權(quán)<b class='flag-5'>密集</b><b class='flag-5'>連接</b>卷積<b class='flag-5'>網(wǎng)絡(luò)</b>的深度強(qiáng)化學(xué)習(xí)方法說(shuō)明

    基于PyTorch的深度學(xué)習(xí)入門(mén)教程之使用PyTorch構(gòu)建一個(gè)神經(jīng)網(wǎng)絡(luò)

    PyTorch的自動(dòng)梯度計(jì)算 Part3:使用PyTorch構(gòu)建一個(gè)神經(jīng)網(wǎng)絡(luò) Part4:訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)分類(lèi)器 Part5:數(shù)據(jù)并行化 本文是關(guān)于Part3的內(nèi)容。 Part3:使
    的頭像 發(fā)表于 02-15 09:40 ?2333次閱讀

    基于PyTorch的深度學(xué)習(xí)入門(mén)教程之PyTorch重點(diǎn)綜合實(shí)踐

    前言 PyTorch提供了兩個(gè)主要特性: (1) 一個(gè)n維的Tensor,與numpy相似但是支持GPU運(yùn)算。 (2) 搭建和訓(xùn)練神經(jīng)網(wǎng)絡(luò)的自動(dòng)微分功能。 我們將會(huì)使用一個(gè)全連接的ReLU網(wǎng)絡(luò)
    的頭像 發(fā)表于 02-15 10:01 ?2128次閱讀

    PyTorch教程8.2之使用塊的網(wǎng)絡(luò)(VGG)

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程8.2之使用塊的網(wǎng)絡(luò)(VGG).pdf》資料免費(fèi)下載
    發(fā)表于 06-05 10:11 ?0次下載
    <b class='flag-5'>PyTorch</b>教程8.2之使用塊的<b class='flag-5'>網(wǎng)絡(luò)</b>(VGG)

    PyTorch教程8.7密集連接網(wǎng)絡(luò)(DenseNet)

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程8.7密集連接網(wǎng)絡(luò)(DenseNet).pdf》資料免費(fèi)
    發(fā)表于 06-05 10:01 ?0次下載
    <b class='flag-5'>PyTorch</b>教程<b class='flag-5'>8.7</b>之<b class='flag-5'>密集</b><b class='flag-5'>連接</b><b class='flag-5'>網(wǎng)絡(luò)</b>(<b class='flag-5'>DenseNet</b>)

    PyTorch教程8.8之設(shè)計(jì)卷積網(wǎng)絡(luò)架構(gòu)

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程8.8之設(shè)計(jì)卷積網(wǎng)絡(luò)架構(gòu).pdf》資料免費(fèi)下載
    發(fā)表于 06-05 10:02 ?0次下載
    <b class='flag-5'>PyTorch</b>教程8.8之設(shè)計(jì)卷積<b class='flag-5'>網(wǎng)絡(luò)</b>架構(gòu)

    PyTorch教程之循環(huán)神經(jīng)網(wǎng)絡(luò)

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程之循環(huán)神經(jīng)網(wǎng)絡(luò).pdf》資料免費(fèi)下載
    發(fā)表于 06-05 09:52 ?0次下載
    <b class='flag-5'>PyTorch</b>教程之循環(huán)神經(jīng)<b class='flag-5'>網(wǎng)絡(luò)</b>

    PyTorch教程14.11之全卷積網(wǎng)絡(luò)

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程14.11之全卷積網(wǎng)絡(luò).pdf》資料免費(fèi)下載
    發(fā)表于 06-05 11:19 ?0次下載
    <b class='flag-5'>PyTorch</b>教程14.11之全卷積<b class='flag-5'>網(wǎng)絡(luò)</b>

    pytorch如何構(gòu)建網(wǎng)絡(luò)模型

      利用 pytorch 來(lái)構(gòu)建網(wǎng)絡(luò)模型有很多種方法,以下簡(jiǎn)單列出其中的四種?! 〖僭O(shè)構(gòu)建一個(gè)網(wǎng)絡(luò)模型如下:  卷積層--》Relu 層--》池化層--》全連接層--》Relu 層--
    發(fā)表于 07-20 11:51 ?0次下載

    使用PyTorch構(gòu)建神經(jīng)網(wǎng)絡(luò)

    PyTorch是一個(gè)流行的深度學(xué)習(xí)框架,它以其簡(jiǎn)潔的API和強(qiáng)大的靈活性在學(xué)術(shù)界和工業(yè)界得到了廣泛應(yīng)用。在本文中,我們將深入探討如何使用PyTorch構(gòu)建神經(jīng)網(wǎng)絡(luò),包括從基礎(chǔ)概念到高級(jí)特性的全面解析。本文旨在為讀者提供一個(gè)完整的
    的頭像 發(fā)表于 07-02 11:31 ?1100次閱讀

    如何使用PyTorch建立網(wǎng)絡(luò)模型

    PyTorch是一個(gè)基于Python的開(kāi)源機(jī)器學(xué)習(xí)庫(kù),因其易用性、靈活性和強(qiáng)大的動(dòng)態(tài)圖特性,在深度學(xué)習(xí)領(lǐng)域得到了廣泛應(yīng)用。本文將從PyTorch的基本概念、網(wǎng)絡(luò)模型構(gòu)建、優(yōu)化方法、實(shí)際應(yīng)用等多個(gè)方面,深入探討使用
    的頭像 發(fā)表于 07-02 14:08 ?847次閱讀

    PyTorch神經(jīng)網(wǎng)絡(luò)模型構(gòu)建過(guò)程

    PyTorch,作為一個(gè)廣泛使用的開(kāi)源深度學(xué)習(xí)庫(kù),提供了豐富的工具和模塊,幫助開(kāi)發(fā)者構(gòu)建、訓(xùn)練和部署神經(jīng)網(wǎng)絡(luò)模型。在神經(jīng)網(wǎng)絡(luò)模型中,輸出層是尤為關(guān)鍵的部分,它負(fù)責(zé)將模型的預(yù)測(cè)結(jié)果以合適的形式輸出。以下將詳細(xì)解析
    的頭像 發(fā)表于 07-10 14:57 ?929次閱讀

    pytorch中有神經(jīng)網(wǎng)絡(luò)模型嗎

    當(dāng)然,PyTorch是一個(gè)廣泛使用的深度學(xué)習(xí)框架,它提供了許多預(yù)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型。 PyTorch中的神經(jīng)網(wǎng)絡(luò)模型 1. 引言 深度學(xué)習(xí)是一種基于人工神經(jīng)
    的頭像 發(fā)表于 07-11 09:59 ?1867次閱讀

    PyTorch如何實(shí)現(xiàn)多層全連接神經(jīng)網(wǎng)絡(luò)

    PyTorch中實(shí)現(xiàn)多層全連接神經(jīng)網(wǎng)絡(luò)(也稱(chēng)為密集連接神經(jīng)網(wǎng)絡(luò)或DNN)是一個(gè)相對(duì)直接的過(guò)程,涉及定義網(wǎng)絡(luò)結(jié)構(gòu)、初始化參數(shù)、前向傳播、損失
    的頭像 發(fā)表于 07-11 16:07 ?2055次閱讀