gpt4 book ai didi

neural-network - Keras 功能 API 中的高级激活层

转载 作者:行者123 更新时间:2023-12-02 13:47:36 26 4
gpt4 key购买 nike

使用 Keras 设置神经网络时,您可以使用Sequential 模型或Functional 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. 不,您忘记将 LeakyReLU 连接到密集层:

    LR = LeakyReLU(alpha=0.1)(dense_1)

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

  3. 仅在有优势时才这样做,例如可调参数。

关于neural-network - Keras 功能 API 中的高级激活层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49866874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com