例如:
inp = keras.Input(shape=s)
D = keras.layers.Dense(d)(inp)
L = keras.layers.Lambda(lambda x: myFunc(x))(D)
outp = keras.layers.Dense(...)(L)
model = keras.model(inp,outp)
与
inp = keras.Input(shape=s)
D = keras.layers.Dense(d)(inp)
L = myFunc(D)
outp = keras.layers.Dense(...)(L)
model = keras.model(inp,outp)
其中myFunc
由tensorflow 函数组成。
后一个版本看起来工作得很好。把东西 Package 成层有什么特别的价值吗?我知道当有可学习的参数时可能需要它,但在这种情况下我会使用自定义层,而不是lambda。
1条答案
按热度按时间ukdjmx9f1#
我认为从功能上来说,使用
tf.keras.layers.Lambda
并没有太多的动机,但我能想到一些。可读性
我喜欢使用它们主要是为了一致性和描述能力。我发现当层和原始TF操作一起使用时,它是一个混乱的东西。
例如,我可以很容易地做到,
tf.keras.layers.Lambda(lambda x: do_cool(x), name="cool_thing")
个它将在
model.summary()
中反射屏蔽
对于
Lambda
层,您可以传入mask
参数来处理掩码,而对于TF操作,您的代码将很容易因为掩码而变得混乱。重要说明
tf.Variable
对象的操作,不建议使用Lambda
层。它们不会作为模型中的可训练变量传递。Lambda
操作是无状态的。因此,对于任何有状态操作,Lambda
都是不可行的。TFOpLambda
我看到当打印model.summary()
)。