我正在使用5类视频分类,并使用TimeDistributed CNN + RNN模型。训练数据集包含70个视频,每个课程每个视频包含20帧。验证数据集包含15个视频,每个课程每个视频包含20帧。测试数据集包含15个视频,每个课程每个视频包含20帧。我使用的批量大小为64。所以,我总共要处理500个视频。我使用RmsProp优化器和分类的cross_entropy损失来编译模型。
我已经用65个纪元训练了模型,但是我注意到一个奇怪的事实,验证准确度要比第一个纪元的训练准确度高,但是在其他纪元中,曲线看起来令人满意。
我的模特是:
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'))
谁能告诉我为什么验证准确率会比训练准确性更高?
答案 0 :(得分:0)
我的猜测是,因为您只有5个类别,所以仅对所有帧猜测一个类别,您的准确度就会达到20%。现在您大约有32%,因此略胜一筹。
我通常不考虑初始精度,因为模型确实很差。 (实际上从图中删除了前N个(在这种情况下,可能是20/30)纪元,以便更好地显示效果。
在第一个时期之后检查混乱矩阵,您可能只会精通几门课。