我已经在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上完成迁移学习时,它也可以完美预测。