chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

PyTorch教程-10.4. 雙向遞歸神經(jīng)網(wǎng)絡(luò)

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

掃碼添加小助手

加入工程師交流群

到目前為止,我們的序列學(xué)習(xí)任務(wù)的工作示例是語言建模,我們的目標(biāo)是在給定序列中所有先前標(biāo)記的情況下預(yù)測(cè)下一個(gè)標(biāo)記。在這種情況下,我們只希望以左向上下文為條件,因此標(biāo)準(zhǔn) RNN 的單向鏈接似乎是合適的。然而,還有許多其他序列學(xué)習(xí)任務(wù)上下文,在這些上下文中,在向左和向右上下文的每個(gè)時(shí)間步調(diào)整預(yù)測(cè)是非常好的。例如,考慮詞性檢測(cè)。在評(píng)估與給定詞相關(guān)的詞性時(shí),為什么我們不應(yīng)該考慮兩個(gè)方向的上下文?

另一項(xiàng)常見任務(wù)(通常在針對(duì)感興趣的實(shí)際任務(wù)微調(diào)模型之前用作預(yù)訓(xùn)練練習(xí))是屏蔽文本文檔中的隨機(jī)標(biāo)記,然后訓(xùn)練序列模型以預(yù)測(cè)缺失標(biāo)記的值。請(qǐng)注意,根據(jù)空白后面的內(nèi)容,缺失標(biāo)記的可能值會(huì)發(fā)生顯著變化:

我是___。

我___餓了。

我___餓了,我能吃半頭豬。

在第一句話中,“快樂”似乎是一個(gè)可能的候選者。“不”和“非?!边@兩個(gè)詞在第二句中似乎說得通,但“不”與第三句似乎格格不入。

幸運(yùn)的是,一種簡(jiǎn)單的技術(shù)可以將任何單向 RNN 轉(zhuǎn)換為雙向 RNN (Schuster 和 Paliwal,1997)。我們簡(jiǎn)單地實(shí)現(xiàn)兩個(gè)單向 RNN 層,它們以相反的方向鏈接在一起并作用于相同的輸入(圖 10.4.1)。對(duì)于第一個(gè) RNN 層,第一個(gè)輸入是x1最后的輸入是 xT,但是對(duì)于第二個(gè) RNN 層,第一個(gè)輸入是 xT最后的輸入是x1. 為了產(chǎn)生這個(gè)雙向 RNN 層的輸出,我們只需將兩個(gè)底層單向 RNN 層的相應(yīng)輸出連接在一起。

pYYBAGR9N2OAGJ96AADWxnNwvHE433.svg

圖 10.4.1雙向 RNN 的架構(gòu)。

正式地為任何時(shí)間步長(zhǎng)t,我們考慮一個(gè)小批量輸入 Xt∈Rn×d(示例數(shù)量: n,每個(gè)示例中的輸入數(shù)量:d) 并令隱藏層激活函數(shù)為?. 在雙向架構(gòu)中,這個(gè)時(shí)間步長(zhǎng)的前向和后向隱藏狀態(tài)是H→t∈Rn×h 和H←t∈Rn×h,分別在哪里h是隱藏單元的數(shù)量。前向和后向隱藏狀態(tài)更新如下:

(10.4.1)H→t=?(XtWxh(f)+H→t?1Whh(f)+bh(f)),H←t=?(XtWxh(b)+H←t+1Whh(b)+bh(b)),

權(quán)重在哪里 Wxh(f)∈Rd×h,Whh(f)∈Rh×h,Wxh(b)∈Rd×h,andWhh(b)∈Rh×h, 和偏見bh(f)∈R1×h和 bh(b)∈R1×h都是模型參數(shù)。

接下來,我們連接前向和后向隱藏狀態(tài) H→t和 H←t獲得隱藏狀態(tài) Ht∈Rn×2h送入輸出層。在具有多個(gè)隱藏層的深度雙向 RNN 中,此類信息作為輸入傳遞到下一個(gè)雙向?qū)?。最后,輸出層?jì)算輸出 Ot∈Rn×q(輸出數(shù)量: q):

(10.4.2)Ot=HtWhq+bq.

這里,權(quán)重矩陣 Whq∈R2h×q和偏見 bq∈R1×q是輸出層的模型參數(shù)。雖然從技術(shù)上講,兩個(gè)方向可以有不同數(shù)量的隱藏單元,但在實(shí)踐中很少做出這種設(shè)計(jì)選擇。我們現(xiàn)在演示雙向 RNN 的簡(jiǎn)單實(shí)現(xiàn)。

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

from mxnet import np, npx
from mxnet.gluon import rnn
from d2l import mxnet as d2l

npx.set_np()

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

10.4.1。從零開始實(shí)施

要從頭開始實(shí)現(xiàn)雙向 RNN,我們可以包含兩個(gè)RNNScratch具有獨(dú)立可學(xué)習(xí)參數(shù)的單向?qū)嵗?/p>

class BiRNNScratch(d2l.Module):
  def __init__(self, num_inputs, num_hiddens, sigma=0.01):
    super().__init__()
    self.save_hyperparameters()
    self.f_rnn = d2l.RNNScratch(num_inputs, num_hiddens, sigma)
    self.b_rnn = d2l.RNNScratch(num_inputs, num_hiddens, sigma)
    self.num_hiddens *= 2 # The output dimension will be doubled

class BiRNNScratch(d2l.Module):
  def __init__(self, num_inputs, num_hiddens, sigma=0.01):
    super().__init__()
    self.save_hyperparameters()
    self.f_rnn = d2l.RNNScratch(num_inputs, num_hiddens, sigma)
    self.b_rnn = d2l.RNNScratch(num_inputs, num_hiddens, sigma)
    self.num_hiddens *= 2 # The output dimension will be doubled

class BiRNNScratch(d2l.Module):
  num_inputs: int
  num_hiddens: int
  sigma: float = 0.01

  def setup(self):
    self.f_rnn = d2l.RNNScratch(num_inputs, num_hiddens, sigma)
    self.b_rnn = d2l.RNNScratch(num_inputs, num_hiddens, sigma)
    self.num_hiddens *= 2 # The output dimension will be doubled

class BiRNNScratch(d2l.Module):
  def __init__(self, num_inputs, num_hiddens, sigma=0.01):
    super().__init__()
    self.save_hyperparameters()
    self.f_rnn = d2l.RNNScratch(num_inputs, num_hiddens, sigma)
    self.b_rnn = d2l.RNNScratch(num_inputs, num_hiddens, sigma)
    self.num_hiddens *= 2 # The output dimension will be doubled

前向和后向 RNN 的狀態(tài)分別更新,而這兩個(gè) RNN 的輸出被連接起來。

@d2l.add_to_class(BiRNNScratch)
def forward(self, inputs, Hs=None):
  f_H, b_H = Hs if Hs is not None else (None, None)
  f_outputs, f_H = self.f_rnn(inputs, f_H)
  b_outputs, b_H = self.b_rnn(reversed(inputs), b_H)
  outputs = [torch.cat((f, b), -1) for f, b in zip(
    f_outputs, reversed(b_outputs))]
  return outputs, (f_H, b_H)

@d2l.add_to_class(BiRNNScratch)
def forward(self, inputs, Hs=None):
  f_H, b_H = Hs if Hs is not None else (None, None)
  f_outputs, f_H = self.f_rnn(inputs, f_H)
  b_outputs, b_H = self.b_rnn(reversed(inputs), b_H)
  outputs = [np.concatenate((f, b), -1) for f, b in zip(
    f_outputs, reversed(b_outputs))]
  return outputs, (f_H, b_H)

@d2l.add_to_class(BiRNNScratch)
def forward(self, inputs, Hs=None):
  f_H, b_H = Hs if Hs is not None else (None, None)
  f_outputs, f_H = self.f_rnn(inputs, f_H)
  b_outputs, b_H = self.b_rnn(reversed(inputs), b_H)
  outputs = [jnp.concatenate((f, b), -1) for f, b in zip(
    f_outputs, reversed(b_outputs))]
  return outputs, (f_H, b_H)

@d2l.add_to_class(BiRNNScratch)
def forward(self, inputs, Hs=None):
  f_H, b_H = Hs if Hs is not None else (None, None)
  f_outputs, f_H = self.f_rnn(inputs, f_H)
  b_outputs, b_H = self.b_rnn(reversed(inputs), b_H)
  outputs = [tf.concat((f, b), -1) for f, b in zip(
    f_outputs, reversed(b_outputs))]
  return outputs, (f_H, b_H)

10.4.2。簡(jiǎn)潔的實(shí)現(xiàn)

使用高級(jí) API,我們可以更簡(jiǎn)潔地實(shí)現(xiàn)雙向 RNN。這里我們以一個(gè) GRU 模型為例。

class BiGRU(d2l.RNN):
  def __init__(self, num_inputs, num_hiddens):
    d2l.Module.__init__(self)
    self.save_hyperparameters()
    self.rnn = nn.GRU(num_inputs, num_hiddens, bidirectional=True)
    self.num_hiddens *= 2

Using the high-level APIs, we can implement bidirectional RNNs more concisely. Here we take a GRU model as an example.

class BiGRU(d2l.RNN):
  def __init__(self, num_inputs, num_hiddens):
    d2l.Module.__init__(self)
    self.save_hyperparameters()
    self.rnn = rnn.GRU(num_hiddens, bidirectional=True)
    self.num_hiddens *= 2

Flax API does not offer RNN layers and hence there is no notion of any bidirectional argument. One needs to manually reverse the inputs as shown in the scratch implementation, if a bidirectional layer is needed.

Using the high-level APIs, we can implement bidirectional RNNs more concisely. Here we take a GRU model as an example.

10.4.3。概括

在雙向 RNN 中,每個(gè)時(shí)間步的隱藏狀態(tài)同時(shí)由當(dāng)前時(shí)間步之前和之后的數(shù)據(jù)確定。雙向 RNN 主要用于序列編碼和給定雙向上下文的觀察估計(jì)。由于長(zhǎng)梯度鏈,雙向 RNN 的訓(xùn)練成本非常高。

10.4.4。練習(xí)

如果不同方向使用不同數(shù)量的隱藏單元,形狀將如何Ht改變?

設(shè)計(jì)具有多個(gè)隱藏層的雙向 RNN。

多義現(xiàn)象在自然語言中很常見。例如,“銀行”一詞在“我去銀行存款”和“我去銀行坐下”的語境中有不同的含義。我們?nèi)绾卧O(shè)計(jì)一個(gè)神經(jīng)網(wǎng)絡(luò)模型,以便在給定上下文序列和一個(gè)詞的情況下,返回該詞在上下文中的向量表示?哪種類型的神經(jīng)架構(gòu)更適合處理多義詞?

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

    關(guān)注

    42

    文章

    4814

    瀏覽量

    103606
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    809

    瀏覽量

    13960
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    基于遞歸神經(jīng)網(wǎng)絡(luò)和前饋神經(jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)預(yù)測(cè)算法

    蛋白質(zhì)二級(jí)結(jié)構(gòu)預(yù)測(cè)是結(jié)構(gòu)生物學(xué)中的一個(gè)重要問題。針對(duì)八類蛋白質(zhì)二級(jí)結(jié)構(gòu)預(yù)測(cè),提出了一種基于遞歸神經(jīng)網(wǎng)絡(luò)和前饋神經(jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)預(yù)測(cè)算法。該算法通過雙向
    發(fā)表于 12-03 09:41 ?9次下載

    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)<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>

    PyTorch教程之從零開始的遞歸神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程之從零開始的遞歸神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 06-05 09:55 ?0次下載
    <b class='flag-5'>PyTorch</b>教程之從零開始的<b class='flag-5'>遞歸</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>實(shí)現(xiàn)

    PyTorch教程9.6之遞歸神經(jīng)網(wǎng)絡(luò)的簡(jiǎn)潔實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程9.6之遞歸神經(jīng)網(wǎng)絡(luò)的簡(jiǎn)潔實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 06-05 09:56 ?0次下載
    <b class='flag-5'>PyTorch</b>教程9.6之<b class='flag-5'>遞歸</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的簡(jiǎn)潔實(shí)現(xiàn)

    PyTorch教程10.3之深度遞歸神經(jīng)網(wǎng)絡(luò)

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

    PyTorch教程10.4雙向遞歸神經(jīng)網(wǎng)絡(luò)

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

    PyTorch教程16.2之情感分析:使用遞歸神經(jīng)網(wǎng)絡(luò)

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程16.2之情感分析:使用遞歸神經(jīng)網(wǎng)絡(luò).pdf》資料免費(fèi)下載
    發(fā)表于 06-05 10:55 ?0次下載
    <b class='flag-5'>PyTorch</b>教程16.2之情感分析:使用<b class='flag-5'>遞歸</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>

    使用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 ?1090次閱讀

    遞歸神經(jīng)網(wǎng)絡(luò)是循環(huán)神經(jīng)網(wǎng)絡(luò)

    遞歸神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,簡(jiǎn)稱RNN)和循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,簡(jiǎn)稱RNN)實(shí)際上是同一個(gè)概念,只是不同的翻譯方式
    的頭像 發(fā)表于 07-04 14:54 ?1544次閱讀

    遞歸神經(jīng)網(wǎng)絡(luò)與循環(huán)神經(jīng)網(wǎng)絡(luò)一樣嗎

    遞歸神經(jīng)網(wǎng)絡(luò)(Recursive Neural Network,RvNN)和循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)是兩種不同類型的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),它們?cè)?/div>
    的頭像 發(fā)表于 07-05 09:28 ?1632次閱讀

    rnn是遞歸神經(jīng)網(wǎng)絡(luò)還是循環(huán)神經(jīng)網(wǎng)絡(luò)

    RNN(Recurrent Neural Network)是循環(huán)神經(jīng)網(wǎng)絡(luò),而非遞歸神經(jīng)網(wǎng)絡(luò)。循環(huán)神經(jīng)網(wǎng)絡(luò)是一種具有時(shí)間序列特性的神經(jīng)網(wǎng)絡(luò),能
    的頭像 發(fā)表于 07-05 09:52 ?1041次閱讀

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

    PyTorch,作為一個(gè)廣泛使用的開源深度學(xué)習(xí)庫,提供了豐富的工具和模塊,幫助開發(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 ?922次閱讀

    遞歸神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)方法

    遞歸神經(jīng)網(wǎng)絡(luò)(Recursive Neural Network,簡(jiǎn)稱RNN)是一種特殊類型的神經(jīng)網(wǎng)絡(luò),其特點(diǎn)在于能夠處理具有層次或樹狀結(jié)構(gòu)的數(shù)據(jù),并通過遞歸的方式對(duì)這些數(shù)據(jù)進(jìn)行建模。與
    的頭像 發(fā)表于 07-10 17:02 ?787次閱讀

    遞歸神經(jīng)網(wǎng)絡(luò)和循環(huán)神經(jīng)網(wǎng)絡(luò)的模型結(jié)構(gòu)

    遞歸神經(jīng)網(wǎng)絡(luò)是一種旨在處理分層結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò),使其特別適合涉及樹狀或嵌套數(shù)據(jù)的任務(wù)。這些網(wǎng)絡(luò)明確地模擬了層次結(jié)構(gòu)中的關(guān)系和依賴關(guān)系,例如語言中的句法結(jié)構(gòu)或圖像中的層次表示。它使用
    的頭像 發(fā)表于 07-10 17:21 ?1298次閱讀
    <b class='flag-5'>遞歸</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>和循環(huán)<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的模型結(jié)構(gòu)

    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í)是一種基于人工
    的頭像 發(fā)表于 07-11 09:59 ?1846次閱讀