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

2018-09-01 15:50 更新

本節(jié)的內(nèi)容是利用 TensorFlow 中的 Cudnn RNN 來實(shí)現(xiàn) GRU 模型、LSTM 模型、RNN-relu 模型以及 RNN-tanh 模型.

Cudnn RNN 有一個(gè)不透明的參數(shù)緩沖區(qū),可用于推理和訓(xùn)練.但是參數(shù)緩沖區(qū)的布局可能會在幾代之間發(fā)生變化.因此,強(qiáng)烈建議使用 RNNParamsSaveable 以規(guī)范格式保存和恢復(fù)權(quán)重和偏差.

下述是一個(gè)典型的用例:

  • 用戶創(chuàng)建一個(gè) CudnnRNN 模型 
  • 用戶查詢參數(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è)包裹對象. 
  • 如果訓(xùn)練,用戶從參數(shù)緩沖區(qū)創(chuàng)建一個(gè) RNNParamsSaveable 對象,以便稍后以規(guī)范格式保存.當(dāng)創(chuàng)建一個(gè) RNNParamsSaveable 對象時(shí),可以提供一個(gè)名稱,這對于區(qū)分多個(gè)RNNParams 可訪問對象(例如編碼器 - 解碼器模型)的名稱很有用 
  • 一次,用戶使用 Saver.save()將參數(shù)緩沖區(qū)保存到模型檢查點(diǎn). 
  • 還原時(shí), 用戶創(chuàng)建 RNNParamsSaveable 對象并使用 Saver.restore() 將參數(shù)緩沖區(qū)從規(guī)范化格式還原為用戶定義的格式, 以及還原檢查點(diǎn)文件中的其他搶救對象.

tf.contrib.cudnn_rnn.CudnnGRU


tf.contrib.cudnn_rnn.CudnnGRU 類

定義在: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
)

從沒有隱藏狀態(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 類

定義在: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 類

定義在: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
)

從沒有隱藏狀態(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 類

定義在: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
)

從沒有隱藏狀態(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ù).

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號