在一个时代之后过度拟合

时间:2017-05-22 12:35:01

标签: keras cross-validation recurrent-neural-network

我正在使用Keras训练模型。

model = Sequential()
model.add(LSTM(units=300, input_shape=(timestep,103), use_bias=True, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(units=536))
model.add(Activation("sigmoid"))
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])

while True:
        history = model.fit_generator( 
            generator = data_generator(x_[train_indices],
                    y_[train_indices], batch = batch, timestep=timestep),
                steps_per_epoch=(int)(train_indices.shape[0] / batch), 
                epochs=1, 
                verbose=1, 
                validation_steps=(int)(validation_indices.shape[0] / batch), 
                validation_data=data_generator(
                    x_[validation_indices],y_[validation_indices], batch=batch,timestep=timestep))

这是符合scikit-learn.org定义的多输入分类: 多输出回归为每个样本分配一组目标值。这可以被认为是预测每个数据点的几个属性,例如某个位置的风向和大小

因此,它是一种递归神经网络,我尝试了不同的时间步长。但结果/问题大致相同。

一个纪元之后,我的火车损失约为0.0X,我的验证损失约为0.6X。并且这个值在接下来的10个时期内保持稳定。

数据集大约是680000行。培训数据为9/10,验证数据为1/10。

我要求直觉背后......

  • 我的模特在一个时代之后已经超过了适合吗?
  • 0.6xx甚至是验证损失的好价值吗?

高级别问题: 因此它是一个多输出分类任务(不是多类),我看到使用sigmoid和binary_crossentropy的唯一方法。你建议采用其他方法吗?

1 个答案:

答案 0 :(得分:0)

我遇到了这个问题,发现学习速度和批量大小对学习过程有很大的影响。就我而言,我做了两件事。

  • 降低学习率(尝试0.00005)
  • 减小批次大小(8、16、32)

此外,您可以尝试防止过度拟合的基本步骤。

  • 降低模型的复杂性
  • 增加训练数据并平衡每个班级的每个样本。
  • 添加更多正则化(Dropout,BatchNorm)