tensorflow實現lstm中遇到的函式記錄

2022-09-13 18:15:10 字數 2741 閱讀 6502

函式一:initializer=tf.random_uniform_initializer(-0.1, 0.1, seed=123)

tf.random_uniform_initializer

引數:函式二:lstm = tf.contrib.rnn.lstmcell(rnn_size, initializer=tf.random_uniform_initializer(-0.1, 0.1, seed=123))

定義基本的lstm單元,rnn_size是lstm cell中的單元數,與輸入向量的維度是一致的。根據輸入的詞向量,來定義維度。

函式三:lstms = tf.contrib.rnn.multirnncell([get_lstm(rnn_size) for _ in range(rnn_num_layers)])

用於例項化遞迴神經網路,rnncell由多個****** cell組成,返回值為輸入張量或者張量列表

函式四:encoder_outputs, encoder_states = tf.nn.dynamic_rnn(lstms, encoder_embed, source_sequence_len, dtype=tf.float32)

encoder_embed代表輸入,[x,y,z]x代表batch的大小,y文字長度,z是embedding編碼的長度。  

source-sequence_len代表輸入的文字長度,可以設定為[x,y],x代表最大長度,y是此次長度,我也沒看太懂,之後繼續補充:

encoder_outputs,每乙個迭代隱狀態的輸出

encode_states,代表最後的編碼的碼字context vector(其長度有什麼確定?後面再補充)

補充:官方文件:

'outputs' is a tensor of shape [batch_size, max_time, cell_state_size]

'state' is a tensor of shape [batch_size, cell_state_size]

我們用乙個小例子來說明其用法,假設你的rnn的輸入input是[2,20,128],其中2是batch_size,20是文字最大長度,128是embedding_size,可以看出,有兩個example,我們假設第二個文字長度只有13,剩下的7個是使用0-padding方法填充的。dynamic返回的是兩個引數:outputs,last_states,其中outputs是[2,20,128],也就是每乙個迭代隱狀態的輸出,last_states是由(c,h)組成的tuple,均為[batch,128]

因此context vector的輸出的長度為embedding編碼的長度。

函式五:tf.identity

看例子:

自己理解作用,通過tf.identity,在圖中只有operation才會執行,因此通過簡單的y=x賦值,在圖中並不會執行,因此需要定義乙個operation,在圖中形成乙個節點,tf.identity是返回乙個一   模一樣新的tensor的op,這會增加乙個新節點到gragh中。

函式六:masks = tf.sequence_mask(target_sequence_len, max_target_sequence_len, dtype=tf.float32, name="masks")

返回乙個表示每個單元的前n個位置的mask張量。

示例:tf.sequence_mask([1, 3, 2], 5) # [[true, false, false, false, false],

# [true, true, true, false, false],

# [true, true, false, false, false]]

tf.sequence_mask([[1, 3],[2,0]]) # [[[true, false, false],

# [true, true, true]],

# [[true, true, false],

# [false, false, false]]]

函式七:encoder_embed = tf.contrib.layers.embed_sequence(rnn_inputs, source_vocab_size, encoder_embedding_size)

tf.contrib.layers.embed_sequence(ids, vocab_size,  embed_dim)

ids: 形狀為[batch_size, doc_length]的int32或int64張量,也就是經過預處理的輸入資料。

vocab_size: 輸入資料的總詞彙量,指的是總共有多少類詞彙,不是總個數

embed_dim:想要得到的嵌入矩陣的維度

返回值:tensorof[batch_size, doc_length, embed_dim]with embedded sequences.

反卷積實現 tensorflow 實現

deconv解卷積,實際是叫做conv transpose,conv transpose實際是卷積的乙個逆向過程,tf中,編寫conv transpose 的時候,心中想著乙個正向的卷積過程會很有幫助。想象一下我們有乙個正向卷積 input shape 1,5,5,3 kernel shape 2,...

Tensorflow實現嶺回歸

嶺回歸可以看作是線性回歸的一種增強版,實現的時候無非就是加入乙個二範數正則化項,但是應當注意,這裡只對於權重進行懲罰,偏置項是不加入正則化的,具體理論可以參見相關的 和blog,在此不贅述。這裡還是使用tf實現了嶺回歸演算法,並實際應用在了乙個真實資料集而非人工資料集上,資料及規模相比於之前的資料也...

Tensorflow實現邏輯回歸

import tensorflow as tf 匯入mnist資料集 from tensorflow.examples.tutorials.mnist import input data mnist input data.read data sets temp data one hot true 定...