我有一个顺序模型,如下所示,单个输出神经元具有线性激活函数(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。
使用缩放的 sigmoid 输出层。
#... 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/