歡迎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...