我正在使用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的定义,这是一个多输出分类问题: 多输出回归为每个样本分配一组目标值。可以将其视为预测每个数据点的几个属性,例如某个位置的风向和大小。 因此,我尝试了不同的时间步长来训练循环神经网络。但结果/问题大多相同。
在一个epoch之后,我的训练损失约为0.0X,验证损失约为0.6X。这些值在接下来的10个epoch中保持稳定。
数据集约有680000行。训练数据占9/10,验证数据占1/10。
我想知道背后的原理...
- 我的模型在一个epoch之后就已经过拟合了吗?
- 0.6xx作为验证损失是否是一个好的值?
binary_crossentropy
的最大值应该是0.7
。因此,“valid” 损失可能非常高。我建议尝试增加“dropout”率并检查这种现象是否仍然存在。 - Marcin Możejko0.7
。如果它没有过度拟合,那么可以使用二分查找来寻找最佳参数。 - Marcin Możejko