首页 文章

使用Tensorflow后端的Keras LSTM RNN中令人费解的训练损失与纪元...行为的任何原因

提问于
浏览
0

我有一个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个持续?

请参阅附图损失与历元图表
loss vs epoch chart

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())

1 回答

相关问题