【问题标题】:Why at first epoch validation accuracy is higher than training accuracy?为什么在第一个 epoch 验证准确度高于训练准确度?
【发布时间】:2020-11-02 07:51:29
【问题描述】:

我正在处理 5 个类别的视频分类,并使用 TimeDistributed CNN + RNN 模型。训练数据集包含 70 个视频,每个视频包含 20 帧。验证数据集包含 15 个视频,每个视频包含 20 帧。测试数据集包含 15 个视频,每个视频包含 20 帧。我使用的批量大小是 64。所以,我总共处理了 500 个视频。我使用 RmsProp 优化器和分类 cross_entropy 损失编译了模型。

我已经用 65 个 epoch 训练了模型。但我注意到一个奇怪的事实,即验证准确度在第一个 epoch 时比训练准确度更高。但是,在其余的 epoch 中,曲线看起来非常令人满意。

我的模型是:

model = Sequential()

input_shape=(20, 128, 128, 3)

model.add(BatchNormalization(input_shape=(20, 128, 128, 3)))

model.add(TimeDistributed(Conv2D(32, (3, 3), strides=(1, 1),activation='relu', padding='same')))
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(Conv2D(128, (3, 3), strides=(1, 1),activation='relu', padding='same')))
model.add(TimeDistributed(MaxPooling2D((2, 2))))
model.add(TimeDistributed(Conv2D(256, (3, 3), strides=(1, 1),activation='relu', padding='same')))
model.add(TimeDistributed(MaxPooling2D((2, 2))))

model.add(TimeDistributed(Flatten()))

model.add(LSTM(256, activation='relu', return_sequences=False))
model.add((Dense(128,activation='relu')))

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

谁能告诉我为什么验证准确率在第一个 epoch 就高于训练准确率?

【问题讨论】:

    标签: python tensorflow keras deep-learning conv-neural-network


    【解决方案1】:

    我的猜测是,因为你只有 5 个类,所以只对所有帧猜测一个,就会得到 20% 的准确率。现在你有大约 32%,所以稍微好一点。

    我通常不看初始准确度,因为模型非常糟糕。 (实际上从图中删除前 N 个(在这种情况下可能是 20/30)时期以更好地显示性能)。

    在第一个 epoch 之后检查混淆矩阵,你可能只擅长几门课。

    【讨论】:

    • 你的回答对我来说似乎很模糊。如果您能弄清楚这背后的原因,那将非常有帮助。
    猜你喜欢
    • 2021-07-22
    • 2017-12-21
    • 2018-07-28
    • 2020-07-08
    • 1970-01-01
    • 2017-11-05
    • 2020-03-29
    • 2020-10-16
    • 2017-10-14
    相关资源
    最近更新 更多