7

keras/activation.py 中定义的 Relu 函数是:

    def relu(x, alpha=0., max_value=None):
      return K.relu(x, alpha=alpha, max_value=max_value)

它有一个 max_value 可用于裁剪该值。现在如何在代码中使用/调用它?我尝试了以下方法:(a)

    model.add(Dense(512,input_dim=1))
    model.add(Activation('relu',max_value=250))
    assert kwarg in allowed_kwargs, 'Keyword argument not understood: 
    ' + kwarg
    AssertionError: Keyword argument not understood: max_value

(二)

    Rel = Activation('relu',max_value=250)

同样的错误

(C)

    from keras.layers import activations
    uu = activations.relu(??,max_value=250)

这样做的问题是它期望输入出现在第一个值中。错误是'relu() 需要至少 1 个参数(1 个给定)'

那么我该如何做这个图层呢?

    model.add(activations.relu(max_value=250))

有同样的问题'relu() 需要至少 1 个参数(1 个给定)'

如果此文件不能用作图层,那么似乎无法为 Relu 指定剪辑值。这意味着此处的评论https://github.com/fchollet/keras/issues/2119关闭提议的更改是错误的......有什么想法吗?谢谢!

4

4 回答 4

10

您可以使用 Keras 后端的 ReLU 功能。因此,首先导入后端:

from keras import backend as K

然后,您可以使用后端功能将自己的函数作为激活传递。这看起来像

def relu_advanced(x):
    return K.relu(x, max_value=250)

然后你可以像这样使用它

model.add(Dense(512, input_dim=1, activation=relu_advanced))

或者

model.add(Activation(relu_advanced))

不幸的是,您必须对附加参数进行硬编码。因此,最好使用一个函数,它返回您的函数并传递您的自定义值:

def create_relu_advanced(max_value=1.):        
    def relu_advanced(x):
        return K.relu(x, max_value=K.cast_to_floatx(max_value))
    return relu_advanced

然后你可以通过任何一个传递你的论点

model.add(Dense(512, input_dim=1, activation=create_relu_advanced(max_value=250)))

或者

model.add(Activation(create_relu_advanced(max_value=250)))
于 2017-03-22T14:31:47.683 回答
1

在下面测试,它会工作:

import keras

def clip_relu (x): 
    return keras.activations.relu(x, max_value=1.)

predictions=Dense(num_classes,activation=clip_relu,name='output')
于 2019-07-16T17:22:02.337 回答
0

这就像一个 lambda 一样简单:

from keras.activations import relu
clipped_relu = lambda x: relu(x, max_value=3.14)

然后像这样使用它:

model.add(Conv2D(64, (3, 3)))
model.add(Activation(clipped_relu))

读取保存在hdf5使用custom_objects字典中的模型时:

model = load_model(model_file, custom_objects={'<lambda>': clipped_relu})
于 2018-11-12T14:08:33.063 回答
0

这就是我使用Lambdalayer 来实现 clip relu 所做的: 步骤 1:定义一个函数来做 reluclip:

def reluclip(x, max_value = 20):
    return K.relu(x, max_value = max_value)

第 2 步:将Lambda层添加到模型中: y = Lambda(function = reluclip)(y)

于 2017-10-17T18:41:24.530 回答