本節(jié)的內容是利用 TensorFlow 中的 Cudnn RNN 來實現(xiàn) GRU 模型、LSTM 模型、RNN-relu 模型以及 RNN-tanh 模型.
Cudnn RNN 有一個不透明的參數(shù)緩沖區(qū),可用于推理和訓練.但是參數(shù)緩沖區(qū)的布局可能會在幾代之間發(fā)生變化.因此,強烈建議使用 RNNParamsSaveable 以規(guī)范格式保存和恢復權重和偏差.
下述是一個典型的用例:
- 用戶創(chuàng)建一個 CudnnRNN 模型
- 用戶查詢參數(shù)緩沖區(qū)大小
- 用戶創(chuàng)建一個用作參數(shù)緩沖區(qū)的變量
- 用戶初始化參數(shù)緩沖區(qū),或將規(guī)范權重加載到參數(shù)緩沖區(qū)中.
- 用戶使用參數(shù)緩沖區(qū)調用模型進行推理或訓練.
- 如果訓練,用戶創(chuàng)建一個包裹對象.
- 如果訓練,用戶從參數(shù)緩沖區(qū)創(chuàng)建一個 RNNParamsSaveable 對象,以便稍后以規(guī)范格式保存.當創(chuàng)建一個 RNNParamsSaveable 對象時,可以提供一個名稱,這對于區(qū)分多個RNNParams 可訪問對象(例如編碼器 - 解碼器模型)的名稱很有用
- 一次,用戶使用 Saver.save()將參數(shù)緩沖區(qū)保存到模型檢查點.
- 還原時, 用戶創(chuàng)建 RNNParamsSaveable 對象并使用 Saver.restore() 將參數(shù)緩沖區(qū)從規(guī)范化格式還原為用戶定義的格式, 以及還原檢查點文件中的其他搶救對象.
tf.contrib.cudnn_rnn.CudnnGRU
tf.contrib.cudnn_rnn.CudnnGRU 類
定義在:tensorflow/contrib/cudnn_rnn/python/ops/cudnn_rnn_ops.py
Cudnn 實現(xiàn) GRU 模型.
方法
__init__
__init__ (
num_layers ,
NUM_UNITS ,
input_size ,
input_mode = 'auto_select' ,
direction = 'unidirectional' ,
dropout = 0.0 ,
seed = 0
)
從沒有隱藏狀態(tài)的 C 模型創(chuàng)建 Cudnn RNN 模型.
ARGS:
- num_layers:RNN 模型的層數(shù).
- num_units:RNN 模型內的單位數(shù).
- input_size:輸入的大小,可能與 NUM_UNITS 不同.
- input_mode:表示在第一層之前的輸入和實際計算之間是否有線性投影.它可以是 “skip_input”,“l(fā)inear_input” 或 “auto_select” .只有當 input_size == NUM_UNITS 時才允許 'skip_input';'auto_select' 意味著'skip_input',當input_size == num_units;否則,它意味著 “l(fā)inear_input”.
- direction:運行模型的方向模型,可以是“單向”或“雙向”
- dropout:是否啟用退出.當它為 0 時,退出被禁用.
- seed:用于初始化退出.
__call__
__call__ (
input_data ,
input_h ,
PARAMS ,
is_training = True
)
運行 Cudnn LSTM 模型的前一個步驟.
ARGS:
- input_data:LSTM 模型的輸入序列.
- input_h:h 的初始隱藏狀態(tài).
- params:為此模型創(chuàng)建的參數(shù)緩沖區(qū).
- is_training:這個操作是否用于訓練或推理.
返回:
- output:輸出順序.
- output_h:h 的最終狀態(tài).
canonical_to_params
canonical_to_params (
weights,
biases
)
將規(guī)范格式的參數(shù)轉換為特定格式的 cuDNN.
ARGS:
- weights:權重參數(shù)的張量.
- biases:偏差參數(shù)的張量.
返回:
用于 canonical-to-params-to-specific 轉換的函數(shù)..
params_size
params_size ()
計算此模型所需的不透明參數(shù)緩沖區(qū)的大小.
返回:
計算的參數(shù)緩沖區(qū)大小.
params_to_canonical
params_to_canonical ( params )
將特定格式的 cuDNN 的參數(shù)轉換為規(guī)范格式.
ARGS:
返回:
用于 specific-to-canonical 轉換的函數(shù).
tf.contrib.cudnn_rnn.CudnnLSTM
tf.contrib.cudnn_rnn.CudnnLSTM 類
定義在:tensorflow/contrib/cudnn_rnn/python/ops/cudnn_rnn_ops.py
Cudnn 實現(xiàn) LSTM 模型.
方法
__init__
__init__ (
num_layers ,
NUM_UNITS ,
input_size ,
input_mode = 'auto_select' ,
direction = 'unidirectional' ,
dropout = 0.0 ,
seed = 0
)
從模型規(guī)范創(chuàng)建 Cudnn LSTM 模型.
ARGS:
- num_layers:RNN 模型的層數(shù).
- num_units:RNN 模型內的單位數(shù).
- input_size:輸入的大小,可能與 NUM_UNITS 不同.
- input_mode:表示在第一層之前的輸入和實際計算之間是否有線性投影.它可以是 “skip_input”,“l(fā)inear_input” 或 “auto_select” ;只有當 input_size == NUM_UNITS 時才允許 'skip_input' ;當 input_size == num_units時,'auto_select' 意味著'skip_input ' ;否則,它意味著“l(fā)inear_input”.
- direction:運行模型的方向模型,可以是“單向”或者“雙向”
- dropout:是否啟用退出.當它為0時,退出被禁用.
- seed:用于初始化退出.
__call__
__call__ (
input_data ,
input_h ,
input_c ,
PARAMS ,
is_training = True
)
運行 Cudnn LSTM 模型的前一個步驟.
ARGS:
- input_data:輸入到 LSTM 模型的序列.
- input_h:h 的初始隱藏狀態(tài).
- input_c:c 的初始隱藏狀態(tài).
- params:為此模型創(chuàng)建的參數(shù)緩沖區(qū).
- is_training:這個操作是否用于訓練或推理.
返回:
- output:輸出順序.
- output_h:h 的最終狀態(tài).
- output_c:c 的最終狀態(tài).
canonical_to_params
canonical_to_params (
weights,
biases
)
將規(guī)范格式的參數(shù)轉換為特定格式的 cuDNN.
ARGS:
- weights:重量參數(shù)的張量.
- biases:偏差參數(shù)的張量.
返回:
用于 canonical-to-params-to-specific 轉換的函數(shù)..
params_size
params_size ()
計算此模型所需的不透明參數(shù)緩沖區(qū)的大小.
返回:
計算的參數(shù)緩沖區(qū)大小.
params_to_canonical
params_to_canonical ( params )
將特定格式的 cuDNN 的參數(shù)轉換為規(guī)范格式.
ARGS:
返回:
用于 specific-to-canonical 轉換的函數(shù).
tf.contrib.cudnn_rnn.CudnnRNNRelu
tf.contrib.cudnn_rnn.CudnnRNNRelu 類
定義在:tensorflow/contrib/cudnn_rnn/python/ops/cudnn_rnn_ops.py
Cudnn 實現(xiàn) RNN-relu 模型
方法
__init__
__init__ (
num_layers ,
NUM_UNITS ,
input_size ,
input_mode = 'auto_select' ,
direction= 'unidirectional' ,
dropout = 0.0 ,
seed = 0
)
從沒有隱藏狀態(tài)的 C 模型創(chuàng)建 Cudnn RNN 模型.
ARGS:
- num_layers:RNN 模型的層數(shù).
- num_units:RNN 模型內的單位數(shù).
- input_size:輸入的大小,可能與 NUM_UNITS 不同.
- input_mode:表示在第一層之前的輸入和實際計算之間是否有線性投影.它可以是“skip_input”,“l(fā)inear_input”或“auto_select” ;只有當 input_size == NUM_UNITS 時才允許'skip_input'.當 input_size == num_units時,'auto_select' 意味著 'skip_input ',否則,它意味著 “l(fā)inear_input”.
- direction:運行模型的方向模型,可以是“單向”或者“雙向”
- dropout:是否啟用退出.當它為0時,退出被禁用.
- seed:用于初始化退出.
__call__
__call__ (
input_data ,
input_h ,
PARAMS ,
is_training = True
)
運行 Cudnn LSTM 模型的前一個步驟.
ARGS:
- input_data:輸入到 LSTM 模型的序列.
- input_h:h 的初始隱藏狀態(tài).
- params:為此模型創(chuàng)建的參數(shù)緩沖區(qū).
- is_training:這個操作是否用于訓練或推理.
返回:
- output:輸出順序.
- output_h:h 的最終狀態(tài).
canonical_to_params
canonical_to_params (
weights,
biases
)
將規(guī)范格式的參數(shù)轉換為特定格式的cuDNN.
ARGS:
- weights:重量參數(shù)的張量.
- biases:偏差參數(shù)的張量.
返回:
用于 canonical-to-params-to-specific 轉換的函數(shù).
params_size
params_size ()
計算此模型所需的不透明參數(shù)緩沖區(qū)的大小.
返回:
計算的參數(shù)緩沖區(qū)大小.
params_to_canonical
params_to_canonical ( params )
將特定格式的 cuDNN 的參數(shù)轉換為規(guī)范格式.
ARGS:
返回:
用于 specific-to-canonical 轉換的函數(shù).
tf.contrib.cudnn_rnn.CudnnRNNTanh
tf.contrib.cudnn_rnn.CudnnRNNTanh 類
定義在:tensorflow/contrib/cudnn_rnn/python/ops/cudnn_rnn_ops.py
Cudnn 實現(xiàn) RNN-tanh 模型
方法
__init__
__init__ (
num_layers ,
NUM_UNITS ,
input_size ,
input_mode = 'auto_select' ,
direction = 'unidirectional' ,
dropout = 0.0 ,
seed = 0
)
從沒有隱藏狀態(tài)的 C 模型創(chuàng)建 Cudnn RNN 模型.
ARGS:
- num_layers:RNN 模型的層數(shù).
- num_units:RNN 模型內的單位數(shù).
- input_size:輸入的大小,可能與 NUM_UNITS 不同.
- input_mode:表示在第一層之前的輸入和實際計算之間是否有線性投影.它可以是“skip_input”,“l(fā)inear_input”或“auto_select” .只有當 input_size == NUM_UNITS 時才允許 'skip_input';當 input_size == num_units 時,'auto_select' 意味著 'skip_input ';否則,它意味著“l(fā)inear_input”.
- direction:運行模型的方向模型,可以是“單向”或者“雙向”
- dropout:是否啟用退出.當它為0時,退出被禁用.
- seed:用于初始化退出.
__call__
__call__ (
input_data ,
input_h ,
PARAMS ,
is_training = True
)
運行 Cudnn LSTM 模型的前一個步驟.
ARGS:
- input_data:輸入到 LSTM 模型的序列.
- input_h:h 的初始隱藏狀態(tài).
- params:為此模型創(chuàng)建的參數(shù)緩沖區(qū).
- is_training:這個操作是否用于訓練或推理.
返回:
- output:輸出順序.
- output_h:h 的最終狀態(tài).
canonical_to_params
canonical_to_params (
weights,
biases
)
將規(guī)范格式的參數(shù)轉換為特定格式的 cuDNN.
ARGS:
- weights:重量參數(shù)的張量.
- biases:偏差參數(shù)的張量.
返回:
用于 canonical-to-params-to-specific 轉換的函數(shù)..
params_size
params_size ()
計算此模型所需的不透明參數(shù)緩沖區(qū)的大小.
返回:
計算的參數(shù)緩沖區(qū)大小.
params_to_canonical
params_to_canonical ( params )
將特定格式的 cuDNN 的參數(shù)轉換為規(guī)范格式.
ARGS:
返回:
用于 specific-to-canonical 轉換的函數(shù).
更多建議: