首页 > 解决方案 > GRU 层的经常性 dropout 大大增加了损失值

问题描述

我正在使用 Keras 使用 Jena 气候数据集和 GRU 层来预测温度。当我将recurrent_dropout一个值设置为大于 0.1 时,程序的准确性会显着下降,经过几轮之后,NaN即使 dropout 值不大,它也会变得如此。没有a的相​​同模型recurrent_dropout可以正常工作。

作为我学习的一部分,我从我的参考书中复制了一些代码,我不希望遇到很大的问题。这是我正在处理的代码,我不明白问题出在哪里。

mean = float_data[:200000].mean(axis = 0)
float_data -= mean

std = float_data[:200000].std(axis = 0)
float_data /= std

model = Sequential()
model.add(layers.GRU(32, dropout = 0.2, recurrent_dropout = 0.2, input_shape = (None, float_data.shape[-1])))
model.add(layers.Dense(1))
model.compile(optimizer = RMSprop(), loss = 'mae')
history = model.fit_generator(train_gen, steps_per_epoch = 500, epochs = 40, validation_data = val_gen, validation_steps = val_steps)

标签: pythonkerasdeep-learning

解决方案


序列的每个时间步都应用循环丢失。因此,例如,如果(循环)辍学率为 0.1,并且您通过循环传递长度为 100 的序列,则任何循环单元在序列末尾仍处于活动状态的概率为 (.9^100 ) = 1/37600。


推荐阅读