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)))
- 是否正确?这里的 x 是否如我所想的那样表示网络?
- 我得到一个错误:"In Lambda,
output_shape
must be a list, a tuple, or a function"。
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友好。
我有一个顺序模型,如下所示,单个输出神经元具有线性激活函数(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 是否如我所想的那样表示网络?
- 我得到一个错误:"In Lambda,
output_shape
must be a list, a tuple, or a function"。
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友好。