0

例如,我有一个三层的顺序模型。

model_loc = tf.keras.Sequential()

下面的代码片段是我向模型添加层并应用激活的常用方法

model.add(Dense(10, input_dim=3, activation=tf.nn.tanh))
model.add(Dense(10, activation=tf.nn.tanh))
model.add(Dense(4))

是否可以在添加每一层后应用激活函数?如下所示:

model.add(Dense(10, input_dim=3))
model.add(activation=tf.nn.tanh))

model.add(Dense(10))
model.add(activation=tf.nn.sigmoid))

model.add(Dense(4))

任何帮助,将不胜感激!

4

1 回答 1

1

这正是 keras 提供Activation层的原因:

model.add(Dense(10, input_dim=3))
model.add(Activation("tanh"))

model.add(Dense(10))
model.add(Activation("sigmoid"))

model.add(Dense(4))

编辑


如果您想使用自定义激活,您可以使用三种不同方法中的一种。

假设您正在重新定义 sigmoid:

def my_sigmoid(x):
    return 1 / (1 + tf.math.exp(-x))
  1. 使用Activation层:

    model.add(Activation(my_sigmoid))
    
  2. 使用Lambda图层:

    model.add(Lambda(lambda x: 1 / (1 + tf.math.exp(-x))))
    
  3. 定义一个自定义Layer

    class MySigmoid(Layer):
    
        def __init__(*args, **kwargs):
            super().__init__(*args, **kwargs)
    
        def call(inputs, **kwargs):
            return 1 / (1+tf.math.exp(-inputs))
    
    model.add(MySigmoid)
    

方法 3 对于参数激活特别有用,例如PReLU.

方法 2 是一种快速修复测试,但就个人而言,我喜欢避免它。

方法 1 是实现简单功能的方法。

于 2020-03-01T14:11:06.053 回答