是否可以先初始化神经网络中的层,然后再添加激活?
Is it possible to initalize the layers in the neural newtworks first and add activations later?
例如,我有一个三层顺序模型。
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))
编辑
如果您想使用自定义激活,您可以使用三种不同方法中的一种。
假设您正在重新定义 sigmoid:
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
:
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 是实现简单函数的方法。
例如,我有一个三层顺序模型。
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))
编辑
如果您想使用自定义激活,您可以使用三种不同方法中的一种。
假设您正在重新定义 sigmoid:
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
: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 是实现简单函数的方法。