TensorFlow使用Cudnn實現(xiàn)模型

2018-09-01 15:50 更新

本節(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:

  • params:權重和偏差參數(shù)的變量.

返回:

用于 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:

  • params:權重和偏差參數(shù)的變量.

返回:

用于 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:

  • params:權重和偏差參數(shù)的變量.

返回:

用于 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:

  • params:權重和偏差參數(shù)的變量.

返回:

用于 specific-to-canonical 轉換的函數(shù).

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號