0

relu在构建顺序模型时,我注意到添加层和层之间存在差异LeakyReLU

test = Sequential()
test.add(Dense(1024, activation="relu"))
test.add(LeakyReLU(0.2))
  1. 为什么我们不能添加带有激活=“ LeakyReLU”的层?(LeakyReLU 不是 keras 可以使用的字符串)
  2. 添加relu层时,我们设置了单元数(在我的示例中为 1024) 为什么我们不能这样做LeakyReLU

relu我确信和之间的区别在于LeakyReLU方法行为,但似乎不止于此。

4

2 回答 2

2
  1. 我们可以通过使用别名来指定密集层本身的激活函数activation='relu',这将使用默认的 keras 参数进行 relu。对于 LeakyRelu 激活函数,keras 中没有这样的别名。我们必须使用tf.keras.layers.LeakyReluor tf.nn.leaky_relu

  2. 我们不能在 Relu 层设置单元数,它只需要之前的输出张量并对其应用 relu 激活函数。您已经为 Dense 层而不是 relu 层指定了单元数。当我们指定时,Dense(1024, activation="relu")我们将输入与权重相乘,添加偏差并在输出上应用 relu 函数(所有这些都在一行中提到)。从步骤 1 中提到的方法开始,这个过程分 2 个阶段完成,首先是乘以权重,添加偏差,然后应用 LeakyRelu 激活函数(在 2 行中提到)。

于 2021-06-01T12:17:05.280 回答
1
    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       
=================================================================
于 2021-06-02T04:28:16.080 回答