創建由 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
inputs
和outputs
張量的形狀格式。如果為真,則這些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)
相關用法
- Python tf.compat.v1.nn.depthwise_conv2d_native用法及代碼示例
- Python tf.compat.v1.nn.depthwise_conv2d用法及代碼示例
- Python tf.compat.v1.nn.dilation2d用法及代碼示例
- Python tf.compat.v1.nn.static_rnn用法及代碼示例
- Python tf.compat.v1.nn.sufficient_statistics用法及代碼示例
- Python tf.compat.v1.nn.embedding_lookup_sparse用法及代碼示例
- Python tf.compat.v1.nn.separable_conv2d用法及代碼示例
- Python tf.compat.v1.nn.weighted_cross_entropy_with_logits用法及代碼示例
- Python tf.compat.v1.nn.convolution用法及代碼示例
- Python tf.compat.v1.nn.conv2d用法及代碼示例
- Python tf.compat.v1.nn.safe_embedding_lookup_sparse用法及代碼示例
- Python tf.compat.v1.nn.nce_loss用法及代碼示例
- Python tf.compat.v1.nn.sampled_softmax_loss用法及代碼示例
- Python tf.compat.v1.nn.pool用法及代碼示例
- Python tf.compat.v1.nn.sigmoid_cross_entropy_with_logits用法及代碼示例
- Python tf.compat.v1.nn.ctc_loss用法及代碼示例
- Python tf.compat.v1.nn.rnn_cell.MultiRNNCell用法及代碼示例
- Python tf.compat.v1.nn.erosion2d用法及代碼示例
- Python tf.compat.v1.nn.raw_rnn用法及代碼示例
- Python tf.compat.v1.distributions.Multinomial.stddev用法及代碼示例
注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.compat.v1.nn.dynamic_rnn。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。