我训练了一个模型,该模型可以对数字图像进行分类,例如mnist问题。
所以我准备了一个包含600、120、120张图像的数据集,用于每个班级的火车,有效测试集。
经过数小时的训练,火车准确性为0.9981,有效准确性为0.9992。 测试精度为0.9992。
但是,当我使用经过训练的模型来预测以前在训练中使用的图像时,平均准确度要比训练低得多……将近70%。
我很困惑,因为如果这是由于过度拟合造成的,那么经过训练的模型应该可以预测用于训练的图像的准确性很高,但是对于新图像和测试集图像而言,准确性都较低。
为什么会这样?这是因为数据集的数量太少还是其他? 下面是训练结果。
...
Epoch 49/50
280/280 [==============================] - 19s 68ms/step - loss: 0.0077 - acc: 0.9971 - val_loss: 0.0125 - val_acc: 0.9992
Epoch 50/50
280/280 [==============================] - 19s 69ms/step - loss: 0.0058 - acc: 0.9981 - val_loss: 0.0126 - val_acc: 0.9992
-- Evaluate --
acc: 99.92%
-编辑- 下面是模型架构
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(width, height, 3)))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
我通过在服务器中使用tensorflow-serving部署此模型来使用此模型。我采样了一些训练中使用的图像,并将数据发布到tensorflow-serving api。而且预测精度很低。