【问题标题】:Keras Activation Functions Tanh Vs SigmoidKeras 激活函数 Tanh 与 Sigmoid
【发布时间】:2020-12-05 20:13:02
【问题描述】:

我有一个使用二进制数据的 LSTM,即标签都是 0 或 1。

这将导致我使用 sigmoid 激活函数,但是当我这样做时,使用具有相同数据的 tanh 激活函数的相同模型的性能明显逊色。

为什么即使数据不在 tanh 激活函数所需的 (-1,1) 范围内,tanh 激活函数也会产生更好的准确度?

Sigmoid 激活函数精度: 训练准确率:60.32 % 验证准确率:72.98 %

Tanh 激活函数精度: 训练准确率:83.41 % 验证准确率:82.82 %

所有其余代码完全相同。

谢谢。

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

    在 (0, 1] 区间内,如果梯度随时间 t 减小,则 sigmoid 给出更好的结果。如果梯度增加,则 tanh 激活函数。

    【讨论】:

    • 感谢您的帮助,我怎么知道梯度是否随时间增加/减少?我需要绘制什么?
    • 绘制损失函数,如果它随着时间的推移稳定-y 递减(如 L 形,一切都应该没问题。如果有非常锯齿状和不可预测的尖峰,那么可能存在问题梯度被反向支持。还要检查网络中的权重,并确保它们在开始训练后立即不是 NaN 或异常大
    • code tensorflow.org/guide/autodiff layer = tf.keras.layers.Dense(2, activation='relu') x = tf.constant([[1., 2., 3.]] ) with tf.GradientTape() as tape: # Forward pass y = layer(x) loss = tf.reduce_mean(y**2) # 计算每个可训练变量的梯度 grad = tape.gradient(loss, layer.trainable_variables )
    【解决方案2】:

    如果训练集上每个输入变量的平均值接近于零,收敛速度通常会更快。 tanh 的均值为零。您的数据很可能已标准化并且平均值接近于零?

    参考:https://medium.com/analytics-vidhya/activation-functions-why-tanh-outperforms-logistic-sigmoid-3f26469ac0d1

    【讨论】:

    • 我的数据是股价数据,我已经转化为股价回报。是的,这是有道理的,因为我的数据以 0 为中心。我没有刻意对数据进行标准化,我将数据从股票价格更改为股票价格回报的原因是为了消除价格之间的比例差异。所以我想,我无意中把它标准化了。谢谢。
    猜你喜欢
    • 2015-11-09
    • 2018-08-14
    • 2017-01-14
    • 2012-01-07
    • 2021-03-23
    • 2017-03-30
    • 2018-04-15
    • 2020-02-02
    • 1970-01-01
    相关资源
    最近更新 更多