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


Python tf.compat.v1.layers.experimental.keras_style_scope用法及代碼示例


使用Keras-style 變量管理。

用法

@tf_contextlib.contextmanager
tf.compat.v1.layers.experimental.keras_style_scope()

生成(Yield)

  • keras 圖層樣式範圍。

在此範圍內創建的所有 tf​​.layers 和 tf RNN 單元都使用Keras-style 變量管理。不允許使用 scope= 參數創建此類層,並且不允許使用 reuse=True。

此範圍的目的是允許現有層的用戶在不破壞現有函數的情況下緩慢過渡到 Keras 層 API。

其中一個示例是在將 TensorFlow 的 RNN 類與 Keras 模型或網絡一起使用時。由於 Keras 模型沒有正確設置變量範圍,RNN 的用戶可能會意外地在兩個不同模型之間共享範圍,或者得到關於已經存在的變量的錯誤。

例子:

class RNNModel(tf.keras.Model):

  def __init__(self, name):
    super(RNNModel, self).__init__(name=name)
    self.rnn = tf.compat.v1.nn.rnn_cell.MultiRNNCell(
      [tf.compat.v1.nn.rnn_cell.LSTMCell(64) for _ in range(2)])

  def call(self, input, state):
    return self.rnn(input, state)

model_1 = RNNModel("model_1")
model_2 = RNNModel("model_2")

# OK
output_1, next_state_1 = model_1(input, state)
# Raises an error about trying to create an already existing variable.
output_2, next_state_2 = model_2(input, state)

解決方案是將模型構造和執行包裝在 keras-style 範圍內:

with keras_style_scope():
  model_1 = RNNModel("model_1")
  model_2 = RNNModel("model_2")

  # model_1 and model_2 are guaranteed to create their own variables.
  output_1, next_state_1 = model_1(input, state)
  output_2, next_state_2 = model_2(input, state)

  assert len(model_1.weights) > 0
  assert len(model_2.weights) > 0
  assert(model_1.weights != model_2.weights)

相關用法


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