如果需要构建一个准确率超过95%的卷积神经网络(CNN)模型,本文将为提供指导。将分三个部分来探讨这个问题:迁移学习、数据增强以及处理过拟合和欠拟合问题。
迁移学习是一种通过从已学习的相关工作中转移知识来改进新任务学习的方法。简而言之,迁移学习的理念是,不从零开始训练一个新模型,而是使用一个已经在图像分类任务上预训练过的模型。
为什么使用迁移学习?迁移学习是一种优化手段,可以节省时间或提高性能。通常,在模型开发和评估之后,才能明显看出迁移学习在特定领域的优势。但在大多数情况下,迁移学习会比从头开始训练的模型获得更好的结果。迁移学习的主要好处包括:更高的起点、更快的技能提升速度和更高的技能上限。下面的图表总结了这三点,可以看到,当应用迁移学习时,训练从更高的起点开始,并更快地达到更高的准确度水平。
在本教程中,将讨论如何在Tensorflow模型中使用Tensorflow Hub进行迁移学习。Tensorflow Hub是一个收集了各种预训练模型的平台,如ResNet、MobileNet、VGG-16等。它们还提供了用于图像分类、语音识别等不同模型。在tf hub中可用的迁移学习模型会移除最后的输出层,以便可以插入自定义的输出层和类别数量。
URL = "https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/2"
feature_extractor = hub.KerasLayer(URL,
input_shape=(IMG_SHAPE, IMG_SHAPE,3))
在这里,使用了MobileNet模型,可以在TensorFlow Hub网站上找到不同的模型。每个模型都有特定的输入图像大小,这将在网站上提及。在MobileNet模型中,提到的图像大小是224×224,所以当使用迁移模型时,请确保将所有图像调整到该特定大小。
feature_extractor.trainable = False
在声明迁移学习模型后,请确保包含上述代码,这确保模型不会从头开始重新训练。现在可以定义自定义模型:
no_of_output_classes=4
from tensorflow.keras import layers
model = tf.keras.Sequential([
feature_extractor,
layers.Dense(No_of_output_classes) # 确保这个数字与输出类别的数量相同
])
model.summary()
现在可以像任何普通模型一样运行model.compile和model.fit。
对于深度学习模型的性能来说,拥有大型数据集至关重要。然而,可以通过增强已有的数据来提高模型的性能。这也有助于模型对不同类型的图像进行泛化。在数据增强中,添加不同的滤镜或稍微改变已有的图像,例如添加随机缩放、旋转图像到随机角度、模糊图像等。
数据增强(来源:维基百科)显示了旋转数据增强。
如果使用的是Tensorflow中的ImageDataGenerator,可以很容易地应用数据增强。
image_gen_train = ImageDataGenerator( # 这里使用ImageDataGenerator
rescale=1./255,
rotation_range=40,
width_shift_range=0.2, # 应用所有这些数据增强
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest')
这些是不同的数据增强的例子,TensorFlow文档中有更多的可用。然后可以将这些增强应用到图像上:
train_data_gen = image_gen_train.flow_from_directory(batch_size=BATCH_SIZE, # 批量大小意味着一次它取100
directory=train_dir, # 这里设置shuffle=True,以便模型不会记住顺序
shuffle=True,
target_size=(IMG_SHAPE,IMG_SHAPE),
class_mode='binary')
这里的train_dir是训练图像的目录路径。
什么是过拟合?过拟合发生在模型学习训练数据的细节和噪声到影响模型在新数据上性能的程度。换句话说,过拟合的模型在训练集上表现良好,但在测试集上表现不佳,这意味着模型在面对新数据时无法泛化。
正如在过拟合中看到的,它过于具体地学习训练数据集,这在给定新数据集时对模型产生负面影响。
欠拟合是相反的情况,模型没有从训练数据中学到足够的知识,以至于在训练和测试数据集上都表现不佳。这通常发生在没有足够的数据进行训练时。
克服过拟合的方法:有一些方法可以克服过拟合: