介绍
如果你决心建立一个CNN模型,使准确性达到95%以上,那可能是适合你的博客。
我们分三个部分来解决这个问题
迁移学习
数据扩展
处理过拟合和欠拟合问题
迁移学习是通过从已经学习的相关任务中迁移知识来改善从新任务中学习的方法。
简而言之,迁移学习的思想不是从头训练新模型,而是使用从图像分类任务中提前训练的模型。
为什么要使用迁移学习? 学习迁移是一种优化,是节约时间和提高性能的捷径。
在开发和评估模型之前,在域中使用迁移学习通常是没有好处的。 然而,迁移学习往往比一开始就训练的模型产生更好的结果
迁移的主要好处包括:
更高的起点:源模型的初始点(在细化模型之前)高于其他方法。
*更高梯度: **在训练源模型过程中,其提升速度快于其他情况。
*更高渐近线: **训练后模型收敛优于其他方式。
本图总结了上述三点,表明将迁移学习应用于模型时,训练可以从更高的点开始,更快地达到更高的精度。
Tensorflow迁移学习本教程介绍如何使用Tensorflow Hub在Tensorflow模型中使用迁移学习。
Tensorflow Hub是收集各种预培训模式(如ResNet、MobileNet和VGG-16 )的位置。 它们也有用于图像分类、语音识别等的不同模型。 Tensorflow Hub中提供的迁移学习模型的最后一个输出层将被删除,以便可以使用自定义类数插入输出层。
tensorflowhub:https://www.tensor flow.org/hub
URL=' https://TF hub.dev/Google/tf2-preview/mobilenet _ v2/feature _ vector/2 ' feature _ extractor=hub.kerer
每个模型都有特定的输入图像大小,将在网站上提及。
在我们的MobileNet模型中,这里提到的图像大小是224224,因此在使用传输模型时,请确保所有图像的大小都调整到此特定大小。
fa ture _ extractor.train able=false声明迁移学习模型后,请包含上面的代码,以防止模型再次从头训练
现在,您可以定义自定义模型。
o _ of _ output _ classes=4fromtensorflow.kerasimportlayersmodel=TF.keras.sequential ([ feature _ extractor,lastor ]
数据扩展对深度学习模型的性能至关重要。 但是,可以通过增加现有数据来提高模型的性能。 它还有助于模型概括各种类型的图像。 数据扩展添加了不同的滤镜,例如随机放大、缩小、以随机角度旋转图像、图像模糊等,或者对现有图像进行了一些更改。
这说明了旋转数据的扩展
在33558www.Sina.com/tensorflow上使用image数据生成器可以轻松地应用数据扩展
image数据生成器:https://www.tensor flow.org/API _ docs/python/TF/keras/preprocessing/imagedatagenerata
image _ gen _ train=image数据生成器(# hereweusetheimagedatageneratorrescale=1./255,rotation_range=40,wiw
nge=0.2, 缥缈的汉堡_range=0.2, horizontal_flip=True, fill_mode='nearest')这些是可用的不同数据扩充的示例,更多信息在TensorFlow文档中查看。
TensorFlow文档:https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/image/ImageDataGenerator
然后我们可以将这些增强应用于我们的图像
train_data_gen = image_gen_train.flow_from_directory(batch_size=BATCH_SIZE, # Batch siz emeans at a time it takes 100 directory=train_dir, # Here we put shuffle= True so tat model doesnt memorise order shuffle=True, target_size=(IMG_SHAPE,IMG_SHAPE), class_mode='binary')这里的 train_dir 是我们的训练图像所在的目录路径。
处理过拟合和欠拟合问题 过度拟合当模型学习训练数据中的细节和噪声时,就会过度拟合,从而对模型在新数据上的性能产生负面影响。
换句话说,过度拟合的模型在训练集上表现良好,而在测试集上表现不佳,这意味着当涉及到新数据时,该模型似乎无法泛化
正如你在过度拟合中看到的,它过于具体地学习训练数据集,并且在给定新数据集时,会对模型产生负面影响。
欠拟合欠拟合是相反的情况,在这种情况下,模型无法从训练数据中学到足够多的知识,以至于在训练和测试数据集上都做得不好。当没有足够的数据可进行训练时,通常会发生这种情况。
克服过度拟合的方法:有两种方法可以解决过度拟合问题:
1)使用更多的训练数据这是克服过度拟合的最简单方法
2)使用数据扩充数据增强可以帮助你克服过度拟合的问题。上文已深入讨论了数据扩充。
3)知道何时停止训练换句话说,知道你想要训练模型的时期数在决定模型是否适合方面具有重要作用
你可以通过绘制训练集和验证集的损失或精度与epoch图来获得想要训练模型的确切数字。
如你所见,在早期停止状态之后,验证集损失会增加,但是训练集值会继续减少。在准确的模型中,无论是训练还是验证,准确性都必须降低
所以这里对应于早期停止值的epoch值就是我们的epoch数
这是未过度拟合或未拟合的模型的示例。
结论通过遵循这些方法,你可以使CNN模型的验证集准确性超过95%。
该项目的完整代码可在这个GitHub上找到:https://github.com/aromaljosebaby。
☆ END ☆
如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 mthler」,每日朋友圈更新一篇高质量博文。
↓扫描二维码添加小编↓