将任意表达式包装为 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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。