如何在Keras中剪辑图层返回的值?

7

如何剪辑Lambda层返回的值?

我尝试使用以下代码:

from keras.backend.tensorflow_backend import clip
from keras.layers.core import Lambda

...
model.add(Dense(1))
model.add(Activation('linear'))
model.add(Lambda(lambda x: clip(x, min_value=200, max_value=1000)))

但是,我把Lambda+夹子放在哪里似乎并不重要,它不会影响任何东西?

你能打印出 model.summary() 吗?而且,“通过剪辑不影响任何东西”是指值没有被剪辑,对吗? - Marcin Możejko
2个回答

5
实际上,这必须在model.compile步骤中作为损失函数来实现。
from keras import backend as K

def clipped_mse(y_true, y_pred):
    return K.mean(K.square(K.clip(y_pred, 0., 1900.) - K.clip(y_true, 0., 1900.)), axis=-1)

model.compile(loss=clipped_mse)

编辑:事实上,现在回想起来,我认为这可能不是正确的方法。这实际上意味着我们不会因为达到过高值而增加惩罚——这与我们想要的相反。


2
尝试这个解决方案:
tf.clip_by_value(yur_values, clip_value_min=0, clip_value_max=1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接