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

如何在一个Keras层中使用不同的激活功能?

范翰飞
2023-03-14

我正在Python中研究Keras,我有一个神经网络(见下面的代码)。目前,它只与ReLu激活一起工作。

出于实验原因,我希望在ReLu上有一些神经元,在softmax上有一些神经元(或任何其他激活功能)。例如,在一个有20个神经元的层中,我希望有10个带有ReLu,10个带有Softmax。

我尝试了一些不同的方法,但总是无法获得输出。

你知道我该怎么做吗?

# - Libraries
from keras.layers import Dense
from keras.models import Sequential
from keras.callbacks import EarlyStopping
early_spotting_monitor = EarlyStopping(patience=2)
layers = 4
neurons = 20
act = "ReLu"

# - Create Neural Network
model = Sequential()
model.add(Dense(neurons,activation=act,input_dim=X_train.shape[1]))

layers -= 1
while layers > 0:
    model.add(Dense(neurons,activation=act))  
    layers -= 1
model.add(Dense(n_months))
model.compile(optimizer="adam",loss="mean_absolute_error")

model.fit(X_train,Y_train,validation_split=0.10,epochs=13,callbacks=[early_spotting_monitor])

编辑:这是我的(工作)代码:

# - Libraries
from keras.callbacks import EarlyStopping
early_spotting_monitor = EarlyStopping(patience=2)
from keras.layers import Input, Dense
from keras.models import Model       
from keras.layers.merge import concatenate

# input layer
visible = Input(shape=(X_train.shape[1],))

hidden11 = Dense(14, activation='relu')(visible)
hidden12 = Dense(3, activation='softplus')(visible)
hidden13 = Dense(2, activation='linear')(visible)    
hidden13 = Dense(2, activation='selu')(visible)  
merge1 = concatenate([hidden11, hidden12, hidden13])

hidden21 = Dense(14, activation='relu')(merge1)
hidden22 = Dense(3, activation='softplus')(merge1)
hidden23 = Dense(2, activation='linear')(merge1)    
hidden13 = Dense(2, activation='selu')(visible) 
merge2 = concatenate([hidden21, hidden22, hidden23])

hidden3 = Dense(20, activation='relu')(merge2)

output = Dense(Y_train.shape[1],activation="linear")(hidden3)
model = Model(inputs=visible, outputs=output)

model.compile(optimizer="adam",loss="mean_absolute_error")
model.fit(X_train,Y_train,validation_split=0.10,epochs=13,callbacks=[early_spotting_monitor])  # starts training

return model

共有2个答案

邬楚青
2023-03-14

这是我最近一直在尝试做的事情,到目前为止,这就是我所做的。我认为这是可行的,但如果有人告诉我我做错了什么,我将不胜感激。我只在输出层上执行此操作,我的输出层有两个单元:

def activations(l):
    l_0 = tf.keras.activations.exponential(l[...,0])
    l_1 = tf.keras.activations.elu(l[...,1])
    lnew = tf.stack([l_0, l_1], axis = 1)
    return lnew

model = tf.keras.Sequential([..., Dense(2, activation = activations)])
祁飞飙
2023-03-14

您必须使用FunctionalAPI来执行此操作,例如:

input = Input(shape = (X_train.shape[1]))
branchA = Dense(neuronsA, activation = "relu")(input)
branchB = Dense(neuronsB, activation = "sigmoid")(input)

out = concatenate([branchA, branchB])

您无法使用Sequential API执行此操作,因此我建议您将代码移动到函数式API。

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

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

  • 本文向大家介绍如何在dot net core中激活session功能?相关面试题,主要包含被问及如何在dot net core中激活session功能?时的应答技巧和注意事项,需要的朋友参考一下 首先要添加session包. 其次要在config service方法里面添加session。然后又在configure方法里面调用usesession。  

  • 我有一个两层神经网络的例子。第一层接受两个参数并有一个输出。第二个应作为第一层的结果使用一个参数和一个附加参数。应该是这样的: 因此,我创建了一个具有两个层的模型,并尝试将它们合并,但它返回了一个错误:<代码>顺序模型中的第一层必须获得“input\u shape”或“batch\u input\u shape”参数 在线<代码>结果。添加(合并)。 型号:

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

  • 我正在从事salesforce项目,需要添加一个包。问题是,在开发人员控制台下,我无法创建Apex类,这导致在将包添加到salesforce时出现以下错误。 这是我在尝试安装软件包时遇到的错误 在阅读了许多论坛之后,我得出了一个结论,我需要在权限集下激活Apex作者权限。但那里没有许可证。 我为salesforce创建了一个开发人员帐户,其中Apex类已经处于活动状态,可以导入包并进行更改。 Sa