【问题标题】:TypeError when using Keras Lambda layer使用 Keras Lambda 层时出现 TypeError
【发布时间】:2019-11-24 08:56:03
【问题描述】:

我正在学习 Keras 并尝试构建我的层,因此我构建了一个简单的 Lambda 层,它只计算输入的平均值。

当我将此层添加到顺序模型时,第 4 行发生了 TypeError。 这是我的代码:

mean_layer = keras.layers.Lambda(lambda x: tf.reduce_mean(x))
model = keras.models.Sequential()
model.add(keras.layers.InputLayer(input_shape=[10]))
model.add(mean_layer())
model.summary()

TypeError: __call__() missing 1 required positional argument: 'inputs'

但是,如果我使用函数模型,事情会顺利进行,我会得到预期的输出。

input = keras.layers.Input(shape=[10])
output = mean_layer(input)
model = keras.models.Model(inputs=[input], outputs=[output])
model.summary()

我在使用顺序 API 时是否以错误的方式构建模型?谢谢

【问题讨论】:

    标签: python machine-learning keras


    【解决方案1】:

    是的,你做错了,应该是这样的:

    model.add(mean_layer)
    

    【讨论】:

    • 我明白了,谢谢!但是当我使用 Dense 或 Input 这样的层时,它们与括号一起使用,为什么在 Lambda 层的情况下要删除括号?
    • @TomLeung 不,您在构造函数和将层分配给变量之间感到困惑,您对所有层只“使用括号”一次。
    • Lambda层在我赋值给一个变量的时候已经构建好了,不需要再调用了。但是当我将 Dense 层添加到模型中时,它首先被调用,所以我需要括号。我做对了吗?感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 2018-08-31
    • 2021-05-25
    • 2021-01-05
    • 2020-09-12
    • 2017-12-06
    • 1970-01-01
    相关资源
    最近更新 更多