训练模型对训练数据集的错误分类

时间:2020-04-21 13:49:21

标签: machine-learning keras deep-learning conv-neural-network vgg-net

我已经在xception模型上使用了转移学习数据集,其中包含47个等级为0的图像和57个等级为1的图像,如下所示。

    base_model = Xception(weights='imagenet',include_top=False,input_shape=(299, 299, 3))
    headModel = base_model.output
    headModel = AveragePooling2D(pool_size=(4, 4))(headModel)
    headModel = Flatten(name="flatten")(headModel)
    headModel = Dense(128, activation="relu")(headModel)
    headModel = Dropout(0.5)(headModel)
    headModel = Dense(2, activation="softmax")(headModel)
    model = Model(inputs=base_model.input, outputs=headModel)
    for layer in base_model.layers:
    layer.trainable = False

    opt = optimizers.Adam(lr=1e-4)
    model.compile(loss="binary_crossentropy", optimizer=opt,metrics=["accuracy"])

现在我有如下所示的104个图像的数据集

train_datagen = ImageDataGenerator(rescale=1./255,rotation_range=30,
    zoom_range=0.15,
    width_shift_range=0.2,
    height_shift_range=0.2,
    shear_range=0.15,
    horizontal_flip=True,
    fill_mode="nearest")
train_generator = train_datagen.flow_from_directory('/content/CROPPED_train',target_size=(299,299),batch_size = 16,seed=np.random.seed())

然后在50个时代之后,我的准确率达到了97-98%

history = model.fit_generator(
    train_generator,
    epochs=5,
    steps_per_epoch=total_train//16)

但是当我对训练集进行预测时,对于班级0和班级1来说,它都只能预测0

import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread("13.png")
img  = cv2.resize(img,(299,299))
plt.imshow(img)
plt.show()
preds = model.predict(np.expand_dims(img, axis=0))[0]
#y= model.predict(img[np.newaxis,...])
i = np.argmax(preds)
print(i)

因此,在这里,如果模型欠拟合,那么它就不必在时期内提供准确性,而它在时期则可以提供良好的准确性,如果模型过拟合,那么它就必须正确地预测训练后的数据集。 因此,请说出问题所在。 对于预测训练数据集,我通过预测一个或两个第1类正确标签获得了53%的准确性。

但是同样,当我在VGG16上完成迁移学习时,它也可以完美预测。

0 个答案:

没有答案