當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python tf.compat.v1.nn.dynamic_rnn用法及代碼示例


創建由 RNNCell cell 指定的循環神經網絡。 (已棄用)

用法

tf.compat.v1.nn.dynamic_rnn(
    cell, inputs, sequence_length=None, initial_state=None, dtype=None,
    parallel_iterations=None, swap_memory=False, time_major=False, scope=None
)

參數

  • cell RNNCell 的一個實例。
  • inputs RNN 輸入。如果time_major == False(默認),這必須是形狀的Tensor[batch_size, max_time, ...],或此類元素的嵌套元組。如果 time_major == True ,則必須是形狀為 Tensor[max_time, batch_size, ...] 或此類元素的嵌套元組。這也可能是滿足此屬性的張量(可能是嵌套的)元組。前兩個維度必須在所有輸入中匹配,否則等級和其他形狀組件可能會有所不同。在這種情況下,在每個 time-step 輸入到 cell 將複製這些元組的結構,除了時間維度(從中獲取時間)。每個時間步的 cell 的輸入將是一個 Tensor 或(可能是嵌套的)張量元組,每個張量的維度為 [batch_size, ...]
  • sequence_length (可選)大小為 [batch_size] 的 int32/int64 向量。當超過批次元素的序列長度時,用於copy-through 狀態和zero-out 輸出。此參數使用戶能夠提取最後一個有效狀態並正確填充輸出,因此提供它是為了正確性。
  • initial_state (可選)RNN 的初始狀態。如果 cell.state_size 是整數,則它必須是具有適當類型和形狀的 Tensor [batch_size, cell.state_size] 。如果 cell.state_size 是一個元組,這應該是一個具有形狀 [batch_size, s] for s in cell.state_size 的張量的元組。
  • dtype (可選)初始狀態和預期輸出的數據類型。如果未提供 initial_state 或 RNN 狀態具有異構 dtype,則為必需。
  • parallel_iterations (默認值:32)。並行運行的迭代次數。那些沒有任何時間依賴性並且可以並行運行的操作將是。此參數以時間換空間。值 >> 1 使用更多內存但花費的時間更少,而較小的值使用更少的內存但計算時間更長。
  • swap_memory 透明地交換前向推理中產生的張量,但需要從 GPU 到 CPU 的反向支撐。這允許訓練通常不適合單個 GPU 的 RNN,而性能損失非常小(或沒有)。
  • time_major inputsoutputs 張量的形狀格式。如果為真,則這些 Tensors 必須為 [max_time, batch_size, depth] 形狀。如果為 false,則這些 Tensors 的形狀必須為 [batch_size, max_time, depth] 。使用time_major = True 效率更高一些,因為它避免了 RNN 計算開始和結束時的轉置。但是,大多數 TensorFlow 數據是 batch-major,因此默認情況下,此函數接受輸入並以 batch-major 形式發出輸出。
  • scope 創建的子圖的變量範圍;默認為"rnn"。

返回

  • 一對(輸出,狀態),其中:
  • outputs RNN 輸出Tensor.

    如果 time_major == False(默認),這將是一個 Tensor 形狀:[batch_size, max_time, cell.output_size]

    如果 time_major == True,這將是一個 Tensor 形狀:[max_time, batch_size, cell.output_size]

    請注意,如果 cell.output_size 是整數或 TensorShape 對象的(可能嵌套的)元組,則 outputs 將是具有與 cell.output_size 相同結構的元組,包含具有與形狀數據 cell.output_size 對應的形狀的張量.

  • state 最後的狀態。如果 cell.state_size 是 int,則其形狀為 [batch_size, cell.state_size] 。如果它是 TensorShape ,它將被塑造成 [batch_size] + cell.state_size 。如果它是一個(可能是嵌套的)整數元組或 TensorShape ,這將是一個具有相應形狀的元組。如果單元格是 LSTMCells state 將是一個元組,其中每個單元格包含一個 LSTMStateTuple

拋出

  • TypeError 如果cell 不是 RNNCell 的實例。
  • ValueError 如果輸入為 None 或空列表。

遷移到 TF2

警告:這個 API 是為 TensorFlow v1 設計的。繼續閱讀有關如何從該 API 遷移到本機 TensorFlow v2 等效項的詳細信息。見TensorFlow v1 到 TensorFlow v2 遷移指南有關如何遷移其餘代碼的說明。

tf.compat.v1.nn.dynamic_rnn 與即刻執行和 tf.function 不兼容。請改用tf.keras.layers.RNN 進行 TF2 遷移。以 LSTM 為例,您可以使用 tf.keras.layers.LSTMCell 或直接通過 tf.keras.layers.LSTM 實例化 tf.keras.layers.RNN 層。創建 keras 層後,您可以通過調用具有輸入和狀態的層來獲取輸出和狀態。有關 Keras RNN 的更多詳細信息,請參閱本指南。您還可以在本文檔中找到更多關於 Keras RNN 和 TF compat v1 rnn 的區別和比較的詳細信息

到原生 TF2 的結構映射

前:

# create 2 LSTMCells
rnn_layers = [tf.compat.v1.nn.rnn_cell.LSTMCell(size) for size in [128, 256]]

# create a RNN cell composed sequentially of a number of RNNCells
multi_rnn_cell = tf.compat.v1.nn.rnn_cell.MultiRNNCell(rnn_layers)

# 'outputs' is a tensor of shape [batch_size, max_time, 256]
# 'state' is a N-tuple where N is the number of LSTMCells containing a
# tf.nn.rnn_cell.LSTMStateTuple for each cell
outputs, state = tf.compat.v1.nn.dynamic_rnn(cell=multi_rnn_cell,
                                             inputs=data,
                                             dtype=tf.float32)

後:

# RNN layer can take a list of cells, which will then stack them together.
# By default, keras RNN will only return the last timestep output and will not
# return states. If you need whole time sequence output as well as the states,
# you can set `return_sequences` and `return_state` to True.
rnn_layer = tf.keras.layers.RNN([tf.keras.layers.LSTMCell(128),
                                 tf.keras.layers.LSTMCell(256)],
                                return_sequences=True,
                                return_state=True)
outputs, output_states = rnn_layer(inputs, states)

如何映射參數

TF1 參數名稱 TF2 參數名稱 注意
cell cell 在RNN層構造函數中
inputs inputs 在RNN層__call__
sequence_length 未使用 在 RNN 之前添加遮罩層:以達到相同的結果。
initial_state initial_state 在RNN層__call__
dtype dtype 在RNN層構造函數中
parallel_iterations 不支持
swap_memory 不支持
time_major time_major 在RNN層構造函數中
scope 不支持

警告:此函數已棄用。它將在未來的版本中刪除。更新說明:請使用keras.layers.RNN(cell),相當於這個API

執行 inputs 的完全動態展開。

例子:

# create a BasicRNNCell
rnn_cell = tf.compat.v1.nn.rnn_cell.BasicRNNCell(hidden_size)

# 'outputs' is a tensor of shape [batch_size, max_time, cell_state_size]

# defining initial state
initial_state = rnn_cell.zero_state(batch_size, dtype=tf.float32)

# 'state' is a tensor of shape [batch_size, cell_state_size]
outputs, state = tf.compat.v1.nn.dynamic_rnn(rnn_cell, input_data,
                                   initial_state=initial_state,
                                   dtype=tf.float32)
# create 2 LSTMCells
rnn_layers = [tf.compat.v1.nn.rnn_cell.LSTMCell(size) for size in [128, 256]]

# create a RNN cell composed sequentially of a number of RNNCells
multi_rnn_cell = tf.compat.v1.nn.rnn_cell.MultiRNNCell(rnn_layers)

# 'outputs' is a tensor of shape [batch_size, max_time, 256]
# 'state' is a N-tuple where N is the number of LSTMCells containing a
# tf.nn.rnn_cell.LSTMStateTuple for each cell
outputs, state = tf.compat.v1.nn.dynamic_rnn(cell=multi_rnn_cell,
                                   inputs=data,
                                   dtype=tf.float32)

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.compat.v1.nn.dynamic_rnn。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。