將任意表達式包裝為 Layer 對象。
用法
tf.keras.layers.Lambda(
    function, output_shape=None, mask=None, arguments=None, **kwargs
)參數
- 
function要評估的函數。將輸入張量作為第一個參數。
- 
output_shape函數的預期輸出形狀。如果未明確提供,則可以推斷此參數。可以是元組或函數。如果是元組,它隻指定第一個維度;假設樣本維度與輸入相同:output_shape = (input_shape[0], ) + output_shape,或者,輸入為None,樣本維度也是None:output_shape = (None, ) + output_shape如果是函數,則將整個形狀指定為輸入的函數形狀:output_shape = f(input_shape)
- 
maskNone(表示沒有掩碼)或具有與compute_mask層方法相同簽名的可調用對象,或者無論輸入是什麽都將作為輸出掩碼返回的張量。
- 
arguments要傳遞給函數的關鍵字參數的可選字典。
Lambda 層的存在使得在構造 Sequential 和函數 API 模型時可以將任意表達式用作 Layer。 Lambda 層最適合簡單操作或快速實驗。對於更高級的用例,請按照本指南對 tf.keras.layers.Layer 進行子類化。
警告:tf.keras.layers.Lambda 層有(反)序列化限製!
繼承tf.keras.layers.Layer 而不是使用Lambda 層的主要原因是保存和檢查模型。 Lambda 層是通過序列化 Python 字節碼來保存的,這本質上是不可移植的。它們隻能在保存它們的相同環境中加載。通過覆蓋它們的get_config 方法,可以以更便攜的方式保存子類層。依賴於子類層的模型通常也更容易可視化和推理。
例子:
# add a x -> x^2 layer
model.add(Lambda(lambda x:x ** 2))# add a layer that returns the concatenation
# of the positive part of the input and
# the opposite of the negative part
def antirectifier(x):
    x -= K.mean(x, axis=1, keepdims=True)
    x = K.l2_normalize(x, axis=1)
    pos = K.relu(x)
    neg = K.relu(-x)
    return K.concatenate([pos, neg], axis=1)
model.add(Lambda(antirectifier))變量:
雖然可以將變量與 Lambda 層一起使用,但不鼓勵這種做法,因為它很容易導致錯誤。例如,考慮以下層:
scale = tf.Variable(1.)
  scale_layer = tf.keras.layers.Lambda(lambda x:x * scale)因為scale_layer 不直接跟蹤scale 變量,所以它不會出現在scale_layer.trainable_weights 中,因此如果在模型中使用scale_layer 則不會被訓練。
更好的模式是編寫一個子類層:
class ScaleLayer(tf.keras.layers.Layer):
    def __init__(self):
      super(ScaleLayer, self).__init__()
      self.scale = tf.Variable(1.)
    def call(self, inputs):
      return inputs * self.scale一般來說,Lambda 層可以方便地進行簡單的無狀態計算,但任何更複雜的都應該使用子類 Layer 來代替。
輸入形狀:任意。將此層用作模型中的第一層時,請使用關鍵字參數 input_shape(整數元組,不包括樣本軸)。輸出形狀:由output_shape 參數指定
相關用法
- Python tf.keras.layers.LayerNormalization用法及代碼示例
- Python tf.keras.layers.Layer用法及代碼示例
- 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.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.Lambda。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
