我有一个如下模型,该模型具有针对单个输出神经元的线性激活函数(默认为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)))



这是对的吗? x在这里是否意味着网如我所期望的那样?
我收到一个错误:“在Lambda中,output_shape必须是列表,元组或函数”。

最佳答案

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相反,这是一个连续功能。


使用缩放的S型输出层。

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



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

关于python - Lambda输出层,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40248427/

10-13 09:14
查看更多