Python RNN对简单数据没有过度拟合

Python RNN对简单数据没有过度拟合,python,machine-learning,neural-network,keras,recurrent-neural-network,Python,Machine Learning,Neural Network,Keras,Recurrent Neural Network,我试图为输入向量中的每个数字预测类。有三节课。类1,如果输入值从0更改为1。类2,如果它从1更改为0。否则为0类 在第二个历元及以后,精度保持在0.8824。更高的训练次数不会改变任何事情。我尝试过将LSTM切换到GRU或SimpleRNN,这不会改变任何东西。我还尝试生成更长的输入向量和多个批次,同样没有成功 唯一有帮助的是将LSTM层的大小增加到128,在每个层(包括LSTM)之后添加三个timedistributedense(128,relu)层和BatchNormalization。但对

我试图为输入向量中的每个数字预测类。有三节课。类1,如果输入值从0更改为1。类2,如果它从1更改为0。否则为0类

在第二个历元及以后,精度保持在0.8824。更高的训练次数不会改变任何事情。我尝试过将
LSTM
切换到
GRU
SimpleRNN
,这不会改变任何东西。我还尝试生成更长的输入向量和多个批次,同样没有成功

唯一有帮助的是将LSTM层的大小增加到128,在每个层(包括LSTM)之后添加三个
timedistributedense(128,relu)
层和
BatchNormalization
。但对于这样一个简单的问题来说,这似乎是矫枉过正,无论如何也不能给出完美的结果

我花了一天多的时间试图让它发挥作用。有什么问题吗? 谢谢


您可以判断出有问题,因为代码的损失值在第一个历元之后为NaN。问题是一个常见的问题,在过去不止一次地困扰过我,那就是
fit
方法采用默认为32的
batch\u size
参数。因为你只有一个例子,你甚至不能填写一批,这种情况显然没有检测到的Keras,但会导致错误的损失计算。因此,您只需将其更改为:

model.fit(X_r, Y_cat, nb_epoch=10, batch_size=1)

不过,可能需要一些努力来拟合这些数据。神经网络很难处理单一的特征(如果输入是热编码的,可能会更容易),而且数据很小。此外,网越大/越深,适应重量所需的时间就越多(即使它被认为更强大)。但至少现在你可以看到损失是如何减少的。您的示例删除了第二层和第三层LSTM,并进行了大约250个时代的培训,我已经能够达到100%的准确率(当然,如果您有更多和更长的示例,数量肯定会更小)。

谢谢!虽然我在任何时期都没有NAN,但删除两个LSTM层并训练250个时期确实有帮助。此外,我发现使用Adam(lr=0.05)optimizer,它可以在大约30个时期内完全训练。@SSS是的,我现在看到我使用的是Keras 1.2.0,而不是最新的1.2.1。更新后,NAN不再存在,因此我猜问题在更新版本中得到了修复。
model.fit(X_r, Y_cat, nb_epoch=10, batch_size=1)