前言
在使用tensorflow編寫LSTM代碼的時候Tensorflow使用LSTM實現中文文本分類(二),使用到很多新的函數,在此將用到的新函數整理一下做一個筆記。
重要方法
tf.random_uniform_initializer()
功能:生成具有均勻分佈的張量的初始化器
參數:
- minval:一個 python 標量或一個標量張量.要生成的隨機值範圍的下限
- maxval:一個 python 標量或一個標量張量.要生成的隨機值範圍的上限.對於浮點類型默認爲1
- seed:一個 Python 整數.用於創建隨機種子.查看 tf.set_random_seed 的行爲
- dtype:數據類型
tf.variable_scope()
參考博客:tf.variable_scope 參數
參數:返回一個用於定義創建variable層的op的上下文管理器
參數(不常用的沒有寫):
- name_or_scope:string或VariableScope:要打開的範圍。
- default_name:如果name_or_scope參數爲None,則將使用默認名稱,此名稱將被唯一。 如果提供了name_or_scope,它將不會被使用,因此它不是必需的,可以是None。
值:傳遞給op函數的Tensor參數列表。 - initializer:此範圍內的變量的默認初始化程序。
- dtype:在此範圍中創建的變量類型(默認爲傳遞範圍中的類型,或從父範圍繼承)
tf.nn.embedding_lookup()
參考博客:tf.nn.embedding_lookup函數的用法
功能:選取一個張量裏面按照索引對應的元素。
參數:
- params 可以是tensor,也可以是數組
- ids 傳入 對應的 索引
tf.contrib.rnn.BasicLSTMCell()
參考博客:記錄tf.contrib.rnn.BasicLSTMCell
功能:創建一個LSTM層
參數:
- num_uints:神經元數量
- forget_bias:遺忘的偏置0-1,0全忘記,1全記得
- state_is_tuple:是否返回元組,最好是true,返回元組。
- activation:激活函數,默認tanh
tf.contrib.rnn.MultiRNNCell()
參考博客:tf.nn.embedding_lookup函數的用法
功能:對RNN進行堆疊。即:將每個單層LSTM穿聯在一起形成一個多層LSTM。經過轉化過的層,可以當做單層LSTM來操作,很方便。
參數:
- cells:run cell 的 list
- state_is_tuple:同上,非必須、
tf.contrib.rnn.MultiRNNCell.zero_state(batch_size, tf.float32)
功能:通過該函數獲得一個全零的初始狀態。
參數:
- batch_size:batch大小
- dtype:數據類型
tf.nn.dynamic_rnn()
博客參考:tf.nn.dynamic_rnn返回值詳解
功能:使用該函數相當於調用了n次call函數,即通過{h0, x1, x2, x3…xn}直接得到{h1, h2, h3, h4, … hn}
參數:
- cell:通過tf.contrib.rnn.MultiRNNCell()堆疊的多層RNN,或者 單層的lstmcell也可以。
- inputs:需要 傳入的 訓練數據
- initial_state:初始狀態(一般可以是零矩陣)
需要特別強調一下該函數的返回:
- outputs:time_step步裏所有的輸出,他到shape爲(batch_size, time_steps, cell.output_size)
- state:最後一步的隱狀態,形態爲(batch_size, cell,state_size)
tf.clip_by_global_norm()
博客參考:tf.clip_by_norm 梯度裁剪
功能:梯度裁剪的最直接目的就是防止梯度爆炸,手段就是控制梯度的最大範式。
參數:
- t_list:梯度列表
- clip_norm:裁剪率
返回值: - list_clipped:裁剪後的梯度列表
- global_norm:全局的規約數
tf.gradients()
博客參考:Tensorflow:tf.gradient()用法以及參數stop_gradient理解
功能:進行梯度計算
參數:
- ys:類似於目標函數,即需要被微分的函數
- xs:被微分的對象/變量,需要求導的參數
返回:
- 該函數返回 xs 中每個 x 的 sum(dy/dx) 的列表.
tf.train.AdamOptimizer( learning_rate ).apply_gradients()
博客參考:tensorflow API:梯度修剪apply_gradients和compute_gradients
功能:把梯度“應用”到變量上去。這是minimize()函數的第二個步驟,返回一個應用的操作。
參數:
- grads_and_vars:compute_gradients()函數返回的(gradient, variable)對兒的列表。
- global_step:可選變量,在變量跟新後會自增一。