为什么一开始验证的准确性比训练的准确性高?

时间:2020-07-13 06:34:37

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

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

我已经用65个纪元训练了模型,但是我注意到一个奇怪的事实,验证准确度要比第一个纪元的训练准确度高,但是在其他纪元中,曲线看起来令人满意。

enter image description here

我的模特是:

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'))

谁能告诉我为什么验证准确率会比训练准确性更高?

1 个答案:

答案 0 :(得分:0)

我的猜测是,因为您只有5个类别,所以仅对所有帧猜测一个类别,您的准确度就会达到20%。现在您大约有32%,因此略胜一筹。

我通常不考虑初始精度,因为模型确实很差。 (实际上从图中删除了前N个(在这种情况下,可能是20/30)纪元,以便更好地显示效果。

在第一个时期之后检查混乱矩阵,您可能只会精通几门课。