tf.keras.layers.Lambda
函数说明
将任意表达式包装为Layer对象。
tf.keras.layers.Lambda(
function, output_shape=None, mask=None, arguments=None, **kwargs
)
使用示例
实现方式一
def test_lambda_layer():
layers_lambda = tf.keras.layers.Lambda(lambda x: x ** 2)
X = np.linspace(1, 10, 10)
print(layers_lambda(X))
if __name__ == '__main__':
test_lambda_layer()
console out:
tf.Tensor([ 1. 4. 9. 16. 25. 36. 49. 64. 81. 100.], shape=(10,), dtype=float32)
实现方式二
def test_lambda_layer2():
class ScaleLayer(tf.keras.layers.Layer):
def call(self, inputs, *args, **kwargs):
return inputs ** 2
layers_lambda = ScaleLayer()
X = np.linspace(1, 10, 10)
print(layers_lambda(X))
if __name__ == '__main__':
test_lambda_layer2()
思考,在Layer引入自变量,模型是否会自动训练
经过多次尝试,该变量会自动训练
def test_lambda_layer3():
X = np.linspace(1, 10, 10000)
y = X ** 2
X = X.reshape(len(X), 1)
class ScaleLayer(tf.keras.layers.Layer):
def __init__(self, trainable=True, name=None, dtype=None, dynamic=False, **kwargs):
super().__init__(trainable, name, dtype, dynamic, **kwargs)
self.scale = tf.Variable(9.)
def call(self, inputs, *args, **kwargs):
return inputs ** self.scale
layers_lambda = ScaleLayer()
print(layers_lambda(X))
model = tf.keras.Sequential()
model.add(layers_lambda)
model.compile(optimizer="adam", loss="mse")
model.fit(X, y, epochs=500)
print(layers_lambda.scale)
if __name__ == '__main__':
test_lambda_layer3()