【问题标题】:Keras How to use max_value in Relu activation functionKeras如何在Relu激活函数中使用max_value
【发布时间】:2017-05-06 06:28:52
【问题描述】:

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

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

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

    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)

    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 关闭提议的更改的评论是错误的...... 有什么想法吗?谢谢!

【问题讨论】:

    标签: tensorflow keras activation-function


    【解决方案1】:

    您可以使用 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)))
    

    【讨论】:

    • 如何加载模型? ...我似乎收到错误消息Value error: unknown activation function:relu_advanced
    • @Smo 看看我的回答 - 它解决了阅读问题,如果它对你来说仍然很重要......
    【解决方案2】:

    这是我使用Lambda 层实现剪辑relu 所做的: 第一步:定义一个函数来做reluclip:

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

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

    【讨论】:

      【解决方案3】:

      这就像一个 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})
      

      【讨论】:

        【解决方案4】:

        在下面测试,它会工作:

        import keras
        
        def clip_relu (x): 
            return keras.activations.relu(x, max_value=1.)
        
        predictions=Dense(num_classes,activation=clip_relu,name='output')
        

        【讨论】:

          猜你喜欢
          • 2021-07-30
          • 2019-11-16
          • 2021-08-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-10
          • 2018-01-12
          • 1970-01-01
          相关资源
          最近更新 更多