在训练阶段,我的CNN验证准确性和损失函数的行为怪异

问题描述

这是我的网络体系结构:

cnn3 = Sequential()
cnn3.add(Conv2D(32,kernel_size=(3,3),activation='relu',input_shape=input_shape))
cnn3.add(MaxPooling2D((2,2)))
cnn3.add(Dropout(0.25))
cnn3.add(Conv2D(64,activation='relu'))
cnn3.add(MaxPooling2D(pool_size=(2,2)))
cnn3.add(Dropout(0.25))
cnn3.add(Conv2D(128,activation='relu'))
cnn3.add(Dropout(0.2))
cnn3.add(Flatten())
cnn3.add(Dense(128,activation='relu'))
cnn3.add(Dropout(0.4)) # 0.3
cnn3.add(Dense(4,activation='softmax'))
cnn3.compile(loss=keras.losses.categorical_crossentropy,optimizer=keras.optimizers.Adam(),metrics=['accuracy'])

当我同时绘制了训练和验证的准确性以及损失函数后,我得到了下两个数字:

我不明白为什么验证准确性和损失都没有遵循训练的准确性和损失?

LOSS

accuracy

解决方法

您的验证遵循火车的损失和准确性。由于数据集较小,因此验证行中的抖动更大。训练和验证之间的偏差可能在某种程度上过拟合。