Tensorflow2.0學習筆記(四)循環神經網絡

目錄

1 Embedding層

2 預訓練的詞向量

3 循環神經網絡

 

1 Embedding層

在神經網絡中,單詞的表示向量可以直接通過訓練的方式得到,把單詞的表示層叫作Embedding層。

在Tensorflow中,可以通過layers.Embedding(m,n)來定義一個Word Embedding層,其中m參數指定詞彙數量,n指定單詞向量的長度。

2 預訓練的詞向量

目前應用的比較廣泛的預訓練模型有 Word2Vec 和 GloVe 等。

3 循環神經網絡

以情感分類任務爲例,輸入是文本序列。循環神經網路考慮序列之間的先後順序,獲取了有效的全局語義信息。

(1)循環神經網絡(未加偏置)

(2)展開的RNN模型

(3)摺疊的RNN模型

·網絡循環接受序列的每一個特徵向量,並刷新內部狀態向量,同時形成輸出。這種的網絡結構叫做循環網絡結構(Recurrent Neural Network,RNN)。

·如果使用張量來參數化網絡,以如下方式更新內存狀態——基本的循環神經網絡(SimpleRNN)。

,其中,偏置b可以選擇不用。狀態向量可以直接用作輸出,即。激活函數更多的採用tanh函數。

(5)RNN的使用

  • 和卷網一樣,循環神經網絡雖然在時間軸上展開了多次,但只能算是一個網絡層。可以通過堆疊多個Cell累來實現卷網一樣的效果,提升網絡的表達能力。但是,循環神經網絡很容出現梯度彌散和爆炸的問題,因此網絡一般控制在10層以內。
  • 通常,最後一層的Cell的狀態很有可能保存了高層的全局語義特徵,因此使用最末層的輸出作爲後續網絡的輸入。
  • SimpleRNNCell使用時,需要初始化每一層的狀態向量。
  • SimpleRNN 默認返回最後一個時間戳上的輸出。如果需要返回所有時間戳上的輸出列表,可以設置return_sequences=True.代碼和輸出如下: 
import tensorflow as tf
from tensorflow.keras import layers


x = tf.random.normal([5, 80, 100])
layer = layers.SimpleRNN(64, return_sequences=True)
out = layer(x)
print(out.shape)

import tensorflow as tf
from tensorflow.keras import layers


x = tf.random.normal([5, 80, 100])
layer = layers.SimpleRNN(64)
out = layer(x)
print(out.shape)

  • 構建一個2層的RNN網絡,如下:
import tensorflow as tf
from tensorflow.keras import layers


x = tf.random.normal([5, 80, 100])

net = tf.keras.Sequential([  # 構建2層的RNN網絡
    # 最末層除外,其他都需要返回所有時間戳的輸出作爲下一層的輸入
    layers.SimpleRNN(64, return_sequences=True),
    layers.SimpleRNN(64), ])

out = net(x)

 

 

參考資料:Tensorflow 深度學習 龍龍老師

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章