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