gpt4 book ai didi

keras - 一个时期后过度拟合

转载 作者:行者123 更新时间:2023-12-03 14:44:35 24 4
gpt4 key购买 nike

我正在使用 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 个 epoch 中保持稳定。

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

我要求背后的直觉..
  • 我的模型在仅仅一个 epoch 之后就已经过拟合了吗?
  • 0.6xx 甚至是验证损失的好值吗?

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

    最佳答案

    我经历过这个问题,发现学习率和批量大小对学习过程有巨大的影响。就我而言,我做了两件事。

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

  • 此外,您可以尝试防止过度拟合的基本步骤。
  • 降低模型的复杂性
  • 增加训练数据并平衡每个类的每个样本。
  • 添加更多正则化(Dropout、BatchNorm)
  • 关于keras - 一个时期后过度拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44113014/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com