当前位置: 首页 > 知识库问答 >
问题:

Keras功能API中的高级激活层

罗星洲
2023-03-14

使用Keras设置神经网络时,您可以使用序列模型或功能API。我的理解是前者易于设置和管理,并且作为层的线性堆栈运行,并且功能方法对于更复杂的架构很有用,特别是那些涉及共享内部层输出的架构。我个人喜欢使用功能API来实现多功能性,但是,我对LeakyReLU等高级激活层有困难。当使用标准激活时,在顺序模型中可以写:

model = Sequential()
model.add(Dense(32, activation='relu', input_dim=100))
model.add(Dense(10, activation='softmax'))
model.compile(optimizer='rmsprop',
          loss='categorical_crossentropy',
          metrics=['accuracy'])

类似地,在函数API中,可以将上述内容编写为:

inpt = Input(shape = (100,))
dense_1 = Dense(32, activation ='relu')(inpt)
out = Dense(10, activation ='softmax')(dense_2)
model = Model(inpt,out)
model.compile(optimizer='rmsprop',
          loss='categorical_crossentropy',
          metrics=['accuracy'])

然而,当使用LeakyReLU和PReLU之类的高级激活时,在该顺序模型中,我们将它们作为单独的层来编写。例如:

model = Sequential()
model.add(Dense(32, input_dim=100))
model.add(LeakyReLU(alpha=0.1))
model.add(Dense(10, activation='softmax'))
model.compile(optimizer='rmsprop',
          loss='categorical_crossentropy',
          metrics=['accuracy'])

现在,我假设有人在函数API方法中做了等效的工作:

inpt = Input(shape = (100,))
dense_1 = Dense(32)(inpt)
LR = LeakyReLU(alpha=0.1)(dense_1)
out = Dense(10, activation ='softmax')(LR)
model = Model(inpt,out)
model.compile(optimizer='rmsprop',
          loss='categorical_crossentropy',
          metrics=['accuracy'])

我的问题是:

  1. 函数式方法中的语法是否正确
  2. 为什么Keras需要一个新的层来实现这些高级激活功能,而不允许我们仅仅替换relu
  3. 为激活功能创建一个新的层,而不是将其分配给现有的层定义(如我们编写的第一个示例中的“relu”)有什么根本不同的地方吗?我意识到您总是可以将激活功能(包括标准功能)编写为新的层,尽管我读到应该避免这样做

共有1个答案

鲁炳
2023-03-14

>

LR=LeakyReLU(α=0.1)(密集型1)

通常高级激活具有可调或可学习的参数,这些参数必须存储在某个地方,它们作为层更有意义,因为您可以访问和保存这些参数。

 类似资料:
  • LeakyReLU层 PReLU层 为一个与xshape相同的可学习的参数向量。 ELU层 f(x) = alpha * (exp(x) - 1.) for x < 0,f(x) = x for x>=0 ThresholdedReLU层 激活函数的作用: 1,激活函数是用来加入非线性因素,解决模型所不能解决的问题。 2,激活函数可以用来组合训练数据的特征,特征的充分组合。 下面我分别对激活函数的

  • LeakyReLU层 keras.layers.advanced_activations.LeakyReLU(alpha=0.3) LeakyRelU是修正线性单元(Rectified Linear Unit,ReLU)的特殊版本,当不激活时,LeakyReLU仍然会有非零输出值,从而获得一个小梯度,避免ReLU可能出现的神经元“死亡”现象。即,f(x)=alpha * x for x < 0,

  • LeakyReLU层 keras.layers.advanced_activations.LeakyReLU(alpha=0.3) LeakyRelU是修正线性单元(Rectified Linear Unit,ReLU)的特殊版本,当不激活时,LeakyReLU仍然会有非零输出值,从而获得一个小梯度,避免ReLU可能出现的神经元“死亡”现象。即,f(x)=alpha * x for x < 0,

  • 我正在Python中研究Keras,我有一个神经网络(见下面的代码)。目前,它只与ReLu激活一起工作。 出于实验原因,我希望在ReLu上有一些神经元,在softmax上有一些神经元(或任何其他激活功能)。例如,在一个有20个神经元的层中,我希望有10个带有ReLu,10个带有Softmax。 我尝试了一些不同的方法,但总是无法获得输出。 你知道我该怎么做吗? 编辑:这是我的(工作)代码:

  • 问题内容: 有时默认的标准激活(如ReLU,tanh,softmax等)和高级激活(如LeakyReLU)还不够。而且它也可能不在keras- contrib中 。 您如何创建自己的激活功能? 问题答案: 归功于Ritchie Ng 对这个Github问题的评论。 请记住,保存和还原模型时必须导入此功能。请参阅keras- contrib的注释 。

  • [source] LeakyReLU keras.layers.LeakyReLU(alpha=0.3) 带泄漏的 ReLU。 当神经元未激活时,它仍允许赋予一个很小的梯度: f(x) = alpha * x for x < 0, f(x) = x for x >= 0. 输入尺寸 可以是任意的。如果将该层作为模型的第一层, 则需要指定 input_shape 参数 (整数元组,不包含样本数量的