Lambda 输出层

Lambda output layer

我有一个顺序模型,如下所示,单个输出神经元具有线性激活函数(Keras 默认值):

model = Sequential()
model.add( ...
...
model.add(Dense(100, activation='relu'))
model.add(Dense(1))

我需要最后的数字以100为界,所以我将上面最后一行代码修改为:

model.add(Lambda(lambda x: x%100, output_shape=(1)))

output_shape=(1) 应该是 output_shape=(1,).

顺便说一句,我认为以下替代方案更好:

  • 剪辑输出到 [0.0, 100.0]

    #...
    model.add(Dense(1)) #-2nd line from code in question
    model.add(Lambda(lambda x: max(0., min(x,100.)), output_shape=(1,)))
    

这是一个连续函数,与 mod 100 相对。

  • 使用缩放的 sigmoid 输出层。

    #...
    model.add(Dense(1), activation='sigmoid')
    model.add(Lambda(lambda x:x*100., output_shape=(1,)))
    

这是可微分的,对SGD友好。