這是所有層都繼承的類。
繼承自:Module
用法
tf.keras.layers.Layer(
    trainable=True, name=None, dtype=None, dynamic=False, **kwargs
)參數
- 
trainable布爾值,層的變量是否應該是可訓練的。
- 
name圖層的字符串名稱。
- 
dtype層的計算和權重的 dtype。也可以是tf.keras.mixed_precision.Policy,它允許計算和權重 dtype 不同。None默認值表示使用tf.keras.mixed_precision.global_policy(),這是一個 float32 策略,除非設置為不同的值。
- 
dynamic如果您的層應該隻即刻地運行,並且不應該用於生成靜態計算圖,請將其設置為True。例如,Tree-RNN 或遞歸網絡就是這種情況,或者通常是使用 Python 控製流來操縱張量的任何層。如果False,我們假設該層可以安全地用於生成靜態計算圖。
屬性
- 
name圖層的名稱(字符串)。
- 
dtype圖層權重的 dtype。
- 
variable_dtypedtype的別名。
- 
compute_dtype層計算的 dtype。層會自動將輸入轉換為此 dtype,這會導致計算和輸出也在此 dtype 中。當混合精度與tf.keras.mixed_precision.Policy一起使用時,這將不同於variable_dtype。
- 
dtype_policy圖層的 dtype 策略。有關詳細信息,請參閱tf.keras.mixed_precision.Policy文檔。
- 
trainable_weights要包含在反向傳播中的變量列表。
- 
non_trainable_weights不應包含在反向傳播中的變量列表。
- 
weights列表 trainable_weights 和 non_trainable_weights 的串聯(按此順序)。
- 
trainable是否應訓練層(布爾值),即是否應將其 potentially-trainable 權重作為layer.trainable_weights的一部分返回。
- 
input_spec可選(列表)InputSpec對象,指定層可以接受的輸入約束。
- 
activity_regularizer該層輸出的可選正則化函數。
- 
dynamic圖層是否動態(eager-only);在構造函數中設置。
- 
input檢索層的輸入張量。僅當該層隻有一個輸入時才適用,即如果它連接到一個傳入層。 
- 
losses使用添加的損失列表add_loss()API。訪問此屬性時會創建變量正則化張量,因此非常安全:訪問 tf.GradientTape下的losses會將梯度傳播回相應的變量。class MyLayer(tf.keras.layers.Layer): def call(self, inputs): self.add_loss(tf.abs(tf.reduce_mean(inputs))) return inputs l = MyLayer() l(np.ones((10, 1))) l.losses [1.0]inputs = tf.keras.Input(shape=(10,)) x = tf.keras.layers.Dense(10)(inputs) outputs = tf.keras.layers.Dense(1)(x) model = tf.keras.Model(inputs, outputs) # Activity regularization. len(model.losses) 0 model.add_loss(tf.abs(tf.reduce_mean(x))) len(model.losses) 1inputs = tf.keras.Input(shape=(10,)) d = tf.keras.layers.Dense(10, kernel_initializer='ones') x = d(inputs) outputs = tf.keras.layers.Dense(1)(x) model = tf.keras.Model(inputs, outputs) # Weight regularization. model.add_loss(lambda:tf.reduce_mean(d.kernel)) model.losses [<tf.Tensor:shape=(), dtype=float32, numpy=1.0>]
- 
metrics使用添加的指標列表add_metric()API。input = tf.keras.layers.Input(shape=(3,)) d = tf.keras.layers.Dense(2) output = d(input) d.add_metric(tf.reduce_max(output), name='max') d.add_metric(tf.reduce_min(output), name='min') [m.name for m in d.metrics] ['max', 'min']
- 
output檢索層的輸出張量。僅當該層隻有一個輸出時才適用,即如果它連接到一個傳入層。 
- 
supports_masking該層是否支持使用compute_mask計算掩碼。
層是一個可調用對象,它將一個或多個張量作為輸入,並輸出一個或多個張量。它涉及計算,定義在call()方法和一個狀態(權重變量)。在子類實現者的方便下,可以在不同的地方創建狀態:
- 在__init__()中;
- 在可選的 build()方法中,該方法由第一個__call__()調用到層,並提供在初始化時可能不知道的輸入的形狀;
- 在 call()的第一次調用中,下麵討論了一些注意事項。
用戶隻需實例化一個層,然後將其視為可調用的。
我們建議Layer 的後代實現以下方法:
- __init__():定義自定義圖層屬性,並使用- add_weight()或其他狀態創建不依賴於輸入形狀的圖層權重。
- build(self, input_shape):此方法可用於創建取決於輸入形狀的權重,使用- add_weight()或其他狀態。- __call__()將通過調用- build()自動構建層(如果尚未構建)。
- call(self, inputs, *args, **kwargs): 調用- __call__確定後- build()已被調用。- call()執行將圖層應用於- inputs.第一次調用可能會另外創建無法方便地創建的狀態- build();有關詳細信息,請參閱其文檔字符串。您可以選擇使用的兩個保留關鍵字參數- call()是:- training(布爾值,調用是處於推理模式還是訓練模式)。在層/模型子類化指南中查看更多詳細信息
- mask(布爾張量編碼輸入中的掩碼時間步,用於 RNN 層)。在層/模型子類化指南中查看更多詳細信息此方法的典型簽名是- call(self, inputs),如果層需要,用戶可以選擇添加- training和- mask。- *args和- **kwargs僅在計劃添加更多輸入參數時對將來的擴展有用。
 
- get_config(self):Returns a dictionary containing the configuration used to initialize this layer. If the keys differ from the arguments in __init__, then override from_config(self) as well. This method is used when saving the layer or a model that contains this layer.
例子:
這是一個基本示例:具有兩個變量 w 和 b 的層,返回 y = w . x + b 。它展示了如何實現 build() 和 call() 。設置為圖層屬性的變量將作為圖層的權重進行跟蹤(在 layer.weights 中)。
class SimpleDense(Layer):
  def __init__(self, units=32):
      super(SimpleDense, self).__init__()
      self.units = units
  def build(self, input_shape): # Create the state of the layer (weights)
    w_init = tf.random_normal_initializer()
    self.w = tf.Variable(
        initial_value=w_init(shape=(input_shape[-1], self.units),
                             dtype='float32'),
        trainable=True)
    b_init = tf.zeros_initializer()
    self.b = tf.Variable(
        initial_value=b_init(shape=(self.units,), dtype='float32'),
        trainable=True)
  def call(self, inputs): # Defines the computation from inputs to outputs
      return tf.matmul(inputs, self.w) + self.b
# Instantiates the layer.
linear_layer = SimpleDense(4)
# This will also call `build(input_shape)` and create the weights.
y = linear_layer(tf.ones((2, 2)))
assert len(linear_layer.weights) == 2
# These weights are trainable, so they're listed in `trainable_weights`:
assert len(linear_layer.trainable_weights) == 2請注意,add_weight() 方法提供了創建權重的快捷方式:
class SimpleDense(Layer):
  def __init__(self, units=32):
      super(SimpleDense, self).__init__()
      self.units = units
  def build(self, input_shape):
      self.w = self.add_weight(shape=(input_shape[-1], self.units),
                               initializer='random_normal',
                               trainable=True)
      self.b = self.add_weight(shape=(self.units,),
                               initializer='random_normal',
                               trainable=True)
  def call(self, inputs):
      return tf.matmul(inputs, self.w) + self.b除了在訓練期間通過反向傳播更新的可訓練權重外,層還可以具有不可訓練的權重。這些權重應在 call() 期間手動更新。這是一個計算其輸入的運行總和的示例層:
class ComputeSum(Layer):
  def __init__(self, input_dim):
      super(ComputeSum, self).__init__()
      # Create a non-trainable weight.
      self.total = tf.Variable(initial_value=tf.zeros((input_dim,)),
                               trainable=False)
  def call(self, inputs):
      self.total.assign_add(tf.reduce_sum(inputs, axis=0))
      return self.total
my_sum = ComputeSum(2)
x = tf.ones((2, 2))
y = my_sum(x)
print(y.numpy())  # [2. 2.]
y = my_sum(x)
print(y.numpy())  # [4. 4.]
assert my_sum.weights == [my_sum.total]
assert my_sum.non_trainable_weights == [my_sum.total]
assert my_sum.trainable_weights == []有關創建層的更多信息,請參閱通過子類化創建新層和模型指南
相關用法
- Python tf.keras.layers.LayerNormalization用法及代碼示例
- Python tf.keras.layers.Layer.add_loss用法及代碼示例
- Python tf.keras.layers.Layer.add_metric用法及代碼示例
- Python tf.keras.layers.Layer.set_weights用法及代碼示例
- Python tf.keras.layers.Layer.get_weights用法及代碼示例
- Python tf.keras.layers.Lambda用法及代碼示例
- Python tf.keras.layers.LocallyConnected1D用法及代碼示例
- Python tf.keras.layers.LSTMCell用法及代碼示例
- Python tf.keras.layers.LSTM用法及代碼示例
- Python tf.keras.layers.LeakyReLU用法及代碼示例
- Python tf.keras.layers.LocallyConnected2D用法及代碼示例
- Python tf.keras.layers.InputLayer用法及代碼示例
- Python tf.keras.layers.serialize用法及代碼示例
- Python tf.keras.layers.Dropout用法及代碼示例
- Python tf.keras.layers.maximum用法及代碼示例
- Python tf.keras.layers.Conv2D用法及代碼示例
- Python tf.keras.layers.RepeatVector用法及代碼示例
- Python tf.keras.layers.Multiply用法及代碼示例
- Python tf.keras.layers.Activation用法及代碼示例
- Python tf.keras.layers.Conv1D用法及代碼示例
注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.keras.layers.Layer。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
