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

Posted

技术标签:

【中文标题】如何在 Keras 中剪辑图层返回的值?【英文标题】:How can I clip the values returned by a layer in Keras? 【发布时间】:2017-08-23 06:41:36 【问题描述】:

如何裁剪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+clip 放在哪里都没有关系,它不会影响任何东西?

【问题讨论】:

你能打印出model.summary()吗?而且 - 剪辑不会影响任何你的意思是值没有被剪辑,是吗? 【参考方案1】:

它实际上必须在 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)

编辑:实际上,事后看来,我认为这可能不是正确的方法。这实际上意味着我们不会因为超出过高的值而增加惩罚 - 这与我们想要的相反。

【讨论】:

以上是关于如何在 Keras 中剪辑图层返回的值?的主要内容,如果未能解决你的问题,请参考以下文章

Keras:如何在顺序模型中获取图层形状

如何在 Keras 中获取图层的输出形状?

如何在keras中通过numpy数组初始化图层

在 Keras 中,如何获取与模型中包含的“模型”对象关联的图层名称?

Keras 2:在“合并”图层中使用lambda函数

我如何正确使用Keras Add图层?