为什么训练精度会波动?

时间:2020-06-02 07:08:06

标签: python tensorflow machine-learning keras

我正在使用5类视频分类,并在Google Colab平台中使用TimeDistributed CNN模型。训练数据集包含80个视频,每个视频包含5帧。验证数据集包含20个视频,每个视频包含5帧。我使用的批量大小为64。因此,我总共要处理100个视频。我使用Adam优化器和分类交叉熵损失对模型进行了编译。

model = Sequential()

input_shape=(5, 128, 128, 3)

model.add(TimeDistributed(Conv2D(32, (3, 3), strides=(1, 1),
            activation='relu', padding='same'), input_shape=input_shape))
model.add(TimeDistributed(MaxPooling2D((2, 2))))
model.add(TimeDistributed(Conv2D(64, (3, 3), strides=(1, 1),
            activation='relu', padding='same')))
model.add(TimeDistributed(Conv2D(128, (3, 3), strides=(1, 1),
            activation='relu', padding='same')))
model.add(TimeDistributed(BatchNormalization()))
model.add(TimeDistributed(MaxPooling2D((2, 2))))
model.add(TimeDistributed(Flatten()))

model.add(GRU(64, return_sequences=False))

model.add(BatchNormalization())

model.add((Dense(128, activation='relu')))
model.add(Dense(5, activation='softmax'))

from tensorflow.keras.optimizers import Adam

model.compile(loss='categorical_crossentropy',
              optimizer=Adam(lr=0.0001),
              metrics=['accuracy'])

但是,在将此模型与数据集拟合之后,训练精度曲线会像这样波动:

here, 50 epoch is used

有人可以帮助我了解这种波动的原因吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试一两件事来稳定训练:

  1. 您可以尝试使用4、8、16、32、64的不同批处理大小。可以生成不同的图。看看这个link。它将为每个批量生成迷你图。

  2. 您还可以更改学习率。您可以通过直接调用keras回调在高原上应用Learning Rate计划程序或Reduce LR。或者,有循环LR尝试找出最佳学习率。 paper Github