关于tensorflow:Keras如何在Relu激活函数中使用max_value

Keras How to use max_value in Relu activation function

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

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

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

1
2
3
4
5
    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

(b)

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

相同误差

(c)

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

问题在于它期望输入出现在第一个值中。错误为"relu()接受至少1个参数(给定1个)"。

那么,我该如何使它成为一个层呢?

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

具有相同的问题"relu()至少接受1个参数(给定1个)"。

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


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

1
from keras import backend as K

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

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

然后你可以像这样使用它

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

1
model.add(Activation(relu_advanced))

不幸的是,您必须硬编码其他参数。因此,最好使用返回函数并传递自定义值的函数:

1
2
3
4
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

然后你可以通过

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

1
model.add(Activation(create_relu_advanced(max_value=250)))


这就像一个lambda一样简单:

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

然后这样使用:

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

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

1
model = load_model(model_file, custom_objects={'<lambda>': clipped_relu})


这就是我使用Lambda层实现clip relu所做的:步骤1:定义一个函数来重新计算:

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

第二步:在模型中添加Lambda层:y = Lambda(function = reluclip)(y)