使用Tensorflow后端的Keras LSTM RNN中令人费解的训练损失与纪元...行为的任何原因
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Tensorflow后端的Keras LSTM RNN中令人费解的训练损失与纪元...行为的任何原因相关的知识,希望对你有一定的参考价值。
我有一个RNN(下面的代码),有4个LSTM层,每个层有100个节点,1个Dense输出层。使用具有不同随机种子的RandomNormal初始化每个层权重。学习率= 0.00025,beta_1 = 0.9,beta_2 = 0.999,epsilon = 1e-08,0.0衰变。 Adam优化器,验证split = 0.1,批量大小16个epochs = 200个1811个训练样本,202个验证样本X数据形状为(2023,10,16)
我发现损失逐渐下降到第75次,然后是急剧下降然后再次逐渐下降直到第200次。见下图这是一个预测网络,当并发RNN时,测试数据的预测准确性对于域(即置信区间)是足够的使用相同的输入X和y数据运行和聚合。每个RNN的层都用随机种子初始化。每个RNN表现出与纪元行为相同的训练损失。
为什么训练和验证显示这种逐渐下降到第75个时期,急剧下降,然后逐渐下降到第200个持续?
请参阅附图损失与历元图表
model = Sequential()
model.add(LSTM(100, return_sequences=True, input_shape=(X.shape[1],X.shape[2]),kernel_initializer=rn_initializer))
rn_initializer = initializers.RandomNormal(mean=0.0, stddev=0.05, seed=datetime.now().microsecond)
model.add(LSTM(100, return_sequences=True, input_shape=(X.shape[1],X.shape[2]),kernel_initializer=rn_initializer))
rn_initializer = initializers.RandomNormal(mean=0.0, stddev=0.05, seed=datetime.now().microsecond)
model.add(LSTM(100, return_sequences=True, input_shape=(X.shape[1],X.shape[2]),kernel_initializer=rn_initializer))
rn_initializer = initializers.RandomNormal(mean=0.0, stddev=0.05, seed=datetime.now().microsecond)
model.add(LSTM(100,kernel_initializer=rn_initializer))
model.add(Dropout(0.05))
rn_initializer = initializers.RandomNormal(mean=0.0, stddev=0.05, seed=datetime.now().microsecond)
model.add(Dense(y.shape[1],kernel_initializer=rn_initializer))
optimizer_fc = optimizers.Adam(lr=0.00025, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)
model.compile(loss='mae', optimizer=optimizer_fc)
print(model.summary())
这个问题是重复的。请参阅前面的问题和答案Strange loss curve while training LSTM with Keras
以上是关于使用Tensorflow后端的Keras LSTM RNN中令人费解的训练损失与纪元...行为的任何原因的主要内容,如果未能解决你的问题,请参考以下文章
带有 TensorFlow 后端的 Keras 不使用 GPU
在 LSTM 网络的输入上使用 Masking 时,Keras(TensorFlow 后端)多 GPU 模型(4gpus)失败
在 Keras 中使用 LSTM 预测股票(Python 3.7、Tensorflow 2.1.0)
python tensorflow 2.0 不使用 Keras 搭建简单的 LSTM 网络