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