是否可以先在神经网络中初始化层,然后再添加激活?

问题描述 投票:0回答:1

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

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))

任何帮助将不胜感激!

tensorflow tensorflow2.0 keras-layer tf.keras tensorflow2.x
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))

编辑


如果要使用自定义激活,则可以使用三种不同方法之一。

假设您正在重新定义S型:

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

  4. 类MySigmoid(层):

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

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

方法2是用于测试的快速修复,但就我个人而言,我希望避免使用它。

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

© www.soinside.com 2019 - 2024. All rights reserved.