將任意表達式包裝為 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)
-
mask
None(表示沒有掩碼)或具有與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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。