LeakyReLU 层如何在不设置单元数的情况下工作?
How LeakyReLU layer works without setting the number of units?
构建顺序模型时,我注意到添加 relu
层和 LeakyReLU
层之间存在差异。
test = Sequential()
test.add(Dense(1024, activation="relu"))
test.add(LeakyReLU(0.2))
- 为什么我们不能添加 activation = "
LeakyReLU
" 的层? (LeakyReLU 不是 keras 可以使用的字符串)
- 添加
relu
层时,我们设置单元数(我的例子是1024)
为什么我们不能对 LeakyReLU
做同样的事情?
我确定 relu
和 LeakyReLU
之间的区别在于方法行为,但似乎不止于此。
我们可以在密集层本身指定激活函数,通过使用像 activation='relu'
这样的别名,这将使用 relu 的默认 keras 参数。对于 LeakyRelu 激活函数,keras 中没有这样的别名。我们必须使用 tf.keras.layers.LeakyRelu
or tf.nn.leaky_relu
.
我们无法在 Relu 层中设置单元数,它只是采用前一个输出张量并对其应用 relu 激活函数。您已经为 Dense 层而不是 relu 层指定了单元数。当我们指定 Dense(1024, activation="relu")
时,我们将输入乘以权重,添加偏差并在输出上应用 relu 函数(所有这些都在一行中提到)。从步骤 1 中提到的方法来看,这个过程分 2 个阶段完成,首先乘以权重,添加偏差,然后应用 LeakyRelu 激活函数(在 2 行中提到)。
import tensorflow as tf
test = Sequential()
test.add(Dense(1024, input_dim=784, activation="relu", name="First"))
test.add(Dense(512, activation=tf.keras.layers.LeakyReLU(alpha=0.01), name="middle"))
test.add(Dense(1, activation='sigmoid', name="Last"))
test.compile(loss='binary_crossentropy', optimizer="adam")
print(test.summary())
输出:
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
First (Dense) (None, 1024) 803840
_________________________________________________________________
middle (Dense) (None, 512) 524800
_________________________________________________________________
Last (Dense) (None, 1) 513
=================================================================
构建顺序模型时,我注意到添加 relu
层和 LeakyReLU
层之间存在差异。
test = Sequential()
test.add(Dense(1024, activation="relu"))
test.add(LeakyReLU(0.2))
- 为什么我们不能添加 activation = "
LeakyReLU
" 的层? (LeakyReLU 不是 keras 可以使用的字符串) - 添加
relu
层时,我们设置单元数(我的例子是1024) 为什么我们不能对LeakyReLU
做同样的事情?
我确定 relu
和 LeakyReLU
之间的区别在于方法行为,但似乎不止于此。
我们可以在密集层本身指定激活函数,通过使用像
activation='relu'
这样的别名,这将使用 relu 的默认 keras 参数。对于 LeakyRelu 激活函数,keras 中没有这样的别名。我们必须使用tf.keras.layers.LeakyRelu
ortf.nn.leaky_relu
.我们无法在 Relu 层中设置单元数,它只是采用前一个输出张量并对其应用 relu 激活函数。您已经为 Dense 层而不是 relu 层指定了单元数。当我们指定
Dense(1024, activation="relu")
时,我们将输入乘以权重,添加偏差并在输出上应用 relu 函数(所有这些都在一行中提到)。从步骤 1 中提到的方法来看,这个过程分 2 个阶段完成,首先乘以权重,添加偏差,然后应用 LeakyRelu 激活函数(在 2 行中提到)。
import tensorflow as tf
test = Sequential()
test.add(Dense(1024, input_dim=784, activation="relu", name="First"))
test.add(Dense(512, activation=tf.keras.layers.LeakyReLU(alpha=0.01), name="middle"))
test.add(Dense(1, activation='sigmoid', name="Last"))
test.compile(loss='binary_crossentropy', optimizer="adam")
print(test.summary())
输出:
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
First (Dense) (None, 1024) 803840
_________________________________________________________________
middle (Dense) (None, 512) 524800
_________________________________________________________________
Last (Dense) (None, 1) 513
=================================================================