TensorFlow深度學習筆記 迴圈神經網路實踐

2021-08-22 00:01:18 字數 3359 閱讀 4162

歡迎star,有問題可以到issue區討論

官方教程位址

text8中只包含27種字元:小寫的從a到z,以及空格符。如果把它打出來,讀起來就像是去掉了所有標點的wikipedia。

用zipfile讀取zip內容為字串,並拆分成單詞list

用connections模組統計單詞數量並找出最常見的單詞

達成隨機取資料的目標

實現**見word2vec.py

上面訓練的是skip-gram模型,是根據目標詞彙**上下文,而word2vec還有一種方式,cbow,根據上下文**目標詞彙。

實際上就是將skip-gram中的輸入輸出反過來。

# look up embeddings for inputs.

embed = tf.nn.embedding_lookup(embeddings, train_dataset)

# sum up vectors on first dimensions, as context vectors

embed_sum = tf.reduce_sum(embed, 0)

**見:

cbow.py

整體思路是,以乙個文字中的乙個詞作為train data,後續的所有詞作為train label,從而能夠根據乙個給定詞,**後續的片段。

input_gate = sigmoid(i * ix + o * im + ib)
- 給輸入乘乙個vocabulary_size * num_nodes大小的矩陣,給輸出乘乙個num_nodes * num_nodes大小的矩陣;

- 用這兩個矩陣調節對輸入資料的取捨程度

- 用sigmoid這個非線性函式進行啟用

forget_gate = sigmoid(i * fx + o * fm + fb)
思路同輸入門,用以對歷史資料做取捨

output_gate = sigmoid(i * ox + o * om + ob)
思路同輸入門,用以對輸出狀態做取捨

update = i * cx + o * cm + cb

state = forget_gate * state + input_gate * tanh(update)

lstm_cell = output_gate * tanh(state)

- 用同樣的方式構造新狀態update

- 用遺忘門處理歷史狀態state

- 用tanh啟用新狀態update

- 用輸入門處理新狀態update

- 整合新舊狀態,再用tanh啟用狀態state

- 用輸出門處理state

上面的cell中,update,output_gate,forget_gate,input_gate計算方法都是一樣的,

可以把四組引數分別合併,一次計算,再分別取出:

values = tf.split(1, gate_count, tf.matmul(i, input_weights) + tf.matmul(o, output_weights) + bias)

input_gate = tf.sigmoid(values[0])

forget_gate = tf.sigmoid(values[1])

update = values[2]

再將lstm-cell的輸出扔到乙個wx+b中調整作為輸出

實現**見singlew_lstm.py

實現**見lstm.py

上面的流程裡,每次都是以乙個字元作為單位,可以使用多一點的字元做**,取最高概率的那個,防止特殊情況導致的誤判

在這裡我們增加字元為2個,形成bigram,**見:bigram_lstm.py

主要通過bigrambatchgenerator類實現

由於bigram情況下,vocabulary_size變為 27*27個,使用one-hot encoding 做predict的話會產生非常稀疏的矩陣,浪費算力,計算速度慢

因此引入embedding_lookup,**見embed_bigram_lstm.py

def create_model(sess, forward_only):

model = seq2seq_model.seq2seqmodel(source_vocab_size=vocabulary_size,

target_vocab_size=vocabulary_size,

buckets=[(20, 21)],

size=256,

num_layers=4,

max_gradient_norm=5.0,

batch_size=batch_size,

learning_rate=1.0,

learning_rate_decay_factor=0.9,

use_lstm=true,

forward_only=forward_only)

return model

覺得我的文章對您有幫助的話,不妨點個star?

土豪可以打賞支援,一分也是愛:

TensorFlow 深度學習筆記

google 深度學習筆記 經常總結是個好習慣,筆記目錄奉上。歡迎star,有問題可以到issue區討論 官方教程位址 最近tensorflow團隊出了乙個model專案,和這個課程無關,但是可以參考 框架 tensorflow 谷歌出品的基於python的深度學習工具集 工具 ipython,py...

TensorFlow深度學習框架

tensorflow支援python和c 兩種程式語言,再複雜的多層神經網路模型都可以用python來實現,如果業務使用其他程式設計也不用擔心,使用跨語言的grpc或者http服務也可以訪問使用tensorflow訓練好的智慧型模型。tensorflow 是乙個採用資料流圖 data flow gr...

深度學習 初識TensorFlow

深度學習使用場景 影象理解 語音識別 自然語言處理 機器自主 無人駕駛 深度學習,如深度神經網路 卷積神經網路和遞迴神經網路已被應用計算機視覺 語音識別 自然語言處理 音訊識別與生物資訊學等領域並取得了很好的效果。深度學習在人工智慧領域的地位 深度學習框架 google brain計畫產物 應用於a...