keras 为什么要使用lambda层而不仅仅是普通代码呢?

4nkexdtk  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(238)

例如:

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。

ukdjmx9f

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都是不可行的。
  • 我不是100%肯定这个,但我假设TF做了一些隐含的 Package TF操作作为Lambda层,无论如何当你在一个模型中使用它们(去与TFOpLambda我看到当打印model.summary())。

相关问题