Python Keras激活函数Tanh Vs Sigmoid

Python Keras激活函数Tanh Vs Sigmoid,python,tensorflow,keras,Python,Tensorflow,Keras,我有一个利用二进制数据的LSTM,即标签都是0或1 这将导致我使用S形激活函数,但当我使用相同数据时,它的性能明显低于使用tanh激活函数的相同模型 为什么即使数据不在tanh激活函数所需的(-1,1)范围内,tanh激活函数仍能产生更好的精度 乙状结肠激活功能准确度: 训练准确率:60.32% 验证准确率:72.98% Tanh激活功能准确度: 训练准确率:83.41% 验证准确率:82.82% 代码的其余部分完全相同 谢谢。如果训练集中每个输入变量的平均值接近于零,则收敛速度通常更快。tan

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

这将导致我使用S形激活函数,但当我使用相同数据时,它的性能明显低于使用tanh激活函数的相同模型

为什么即使数据不在tanh激活函数所需的(-1,1)范围内,tanh激活函数仍能产生更好的精度

乙状结肠激活功能准确度: 训练准确率:60.32% 验证准确率:72.98%

Tanh激活功能准确度: 训练准确率:83.41% 验证准确率:82.82%

代码的其余部分完全相同


谢谢。

如果训练集中每个输入变量的平均值接近于零,则收敛速度通常更快。tanh的平均值为零。你的数据很可能是标准化的,平均值接近于零


参考:

如果训练集中每个输入变量的平均值接近零,则收敛速度通常更快。tanh的平均值为零。你的数据很可能是标准化的,平均值接近于零


Ref:

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

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

我的数据是转换为股票价格回报的股票价格数据。是的,这是有道理的,因为我的数据以0为中心。我没有有意规范化我的数据tbh,这就是我更改d的原因从股票价格到股票价格回报的ata是为了消除价格之间的尺度差异。所以我想,我无意中对其进行了标准化。谢谢。我的数据是股票价格数据,我已将其转换为股票价格回报。是的,这是有道理的,因为我的数据集中在0左右。我没有有意对数据进行标准化tbh,这是我将数据从股票价格更改为股票价格回报是为了消除价格之间的尺度差异。所以我想,我无意中对其进行了归一化。谢谢。谢谢你的帮助,我如何知道梯度是否随时间增加/减少?我需要绘制什么?绘制损失函数,如果它随时间稳定-y递减 (就像L型一样,一切都应该正常。如果有非常锯齿状和不可预测的尖峰,那么可能是梯度被支撑的问题。还要检查网络中的权重,确保它们在开始训练后立即不是NaN或异常大
code
layer=tf.keras.layers.Dense(2,activation='relu')x=tf.常数([[1,2,3.]]),tf.GradientTape()作为磁带:#前向传递y=layer(x)损耗=tf.减少平均值(y**2)#计算每个可训练变量的梯度grad=tape.gradient(损失,层。可训练的_变量)谢谢你的帮助,我如何知道梯度是否随时间增加/减少?我需要绘制什么?绘制损失函数,如果它随时间稳定-y减少(就像L型一样,一切都应该正常。如果有非常锯齿状和不可预测的尖峰,那么可能是梯度被支撑的问题。还要检查网络中的权重,确保它们在开始训练后立即不是NaN或异常大
code
layer=tf.keras.layers.Dense(2,activation='relu')x=tf.常数([[1,2,3.]]),tf.GradientTape()作为磁带:#前向传递y=layer(x)损耗=tf.减少平均值(y**2)#计算每个可训练变量梯度=磁带梯度(损失、层、可训练变量)