例如,我有一个包含三层的顺序模型。
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))
任何帮助将不胜感激!
这正是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))
使用Activation
层:
model.add(Activation(my_sigmoid))
使用Lambda
层:
model.add(Lambda(lambda x:1 /(1 + tf.math.exp(-x))))>
定义自定义Layer
:
类MySigmoid(层):
def __init__(*args, **kwargs):
super().__init__(*args, **kwargs)
def call(inputs, **kwargs):
return 1 / (1+tf.math.exp(-inputs))
方法3对于参数激活特别有用,例如PReLU
。
方法2是用于测试的快速修复,但就我个人而言,我希望避免使用它。
方法1是实现简单功能的方法。