让我们来探索迁移学习…

探秘迁移学习的奥秘...

让我们用一些简单的问题来探讨。

  1. 什么是迁移学习?
  2. 为什么使用迁移学习,有什么好处?
  3. 这个迁移学习模型的例子是什么?

什么是迁移学习?

有很多定义可以描述迁移学习 – 它基本上是利用预训练模型的知识来解决新问题。

什么是预训练模型?

预训练模型是已经在大型数据集上进行了训练的模型。

为什么使用迁移学习及其好处?

迁移学习有很多好处。通常情况下,使用深度神经网络进行从头训练需要非常庞大的数据集和大量的计算能力。为了克服这些挑战,迁移学习被证明非常有帮助。

其中的好处包括…

  • 迁移学习技术需要较少的计算能力,可以利用现有资源和少量本地训练数据进行执行。这种方法节省存储空间和运行时间。
  • 它可以在少量数据上进行训练,因为它已经在大型数据集上进行了训练。当利用这样的模型时,只需要少量数据。
  • 它节省时间,提高学习速度。

为了更深入地了解…

Image by Author @tejasrimasina2002
Image by Author @tejasrimasina2002

在这之中,我们观察到我们可以根据我们的应用要求来修改密集层。

关于这个迁移学习模型的例子?

存在许多预训练模型,例如…

  • Xception, ResNet, VGG, MobileNet, Efficient Net, AlexNet等等…

你可以在这里查看。

让我们深入研究一个迁移模型的例子,并探索其架构。

图片作者: @tejasrimasina2002

VGG模型是由牛津大学视觉几何组(VGG)的Karen Simonyan和Andrew Zisserman开发的一种卷积神经网络架构。它们在ImageNet挑战赛中取得了显著的成绩。主要有两个变体:VGG16和VGG19。实验涉及六个具有可训练层数不同的模型,其中最受欢迎的是VGG16和VGG19。

VGG是在包含1.2百万张图像和1000个类别的ImageNet数据集上进行训练的。

如果我们来看一下VGG16的架构…

来源:researchgate.net

卷积层:卷积层由一组可学习的滤波器组成,这些滤波器对输入数据进行卷积操作。使用这样的滤波器,网络可以学习数据的分层表示,可以识别输入中的特征。为了提取局部模式,如边缘或纹理,每个滤波器在输入上滑动并应用数学操作,以帮助神经网络进行特征提取。

在VGG16中

所有卷积层具有

  • 滤波器大小=3×3
  • 步幅=1
  • 填充=相同

最大池化:最大池化通过选择数据片段中的最大值来减少数据的数量,同时保留有效学习所需的关键信息,避免数据中的小变化。

最大池化层具有

  • 滤波器大小=2×2
  • 步幅=2

在第一个卷积层中,图像尺寸为224x224x64。之后缩小到112×112

Image by Author @tejasrimasina2002

为了对架构有更清晰的了解…

Image by Author @tejasrimasina2002

这是关于Vgg16的内容。

要更深入了解VGG16的工作原理,我推荐查阅这个资源。

VGGNet-16架构:完整指南

通过Kaggle笔记本探索和运行机器学习代码 | 使用多个数据源的数据

www.kaggle.com

让我们编写代码,以获得更好的理解。

在这里,我想用代码来演示。

在这里,我使用了玉米叶或玉米数据集进行了一个涉及四种类别的分类任务。

  • 枯萎病
  • 普通锈病
  • 灰斑病
  • 健康

来源:来自Kaggle数据集的图像

玉米叶病数据集

基于人工智能的玉米/玉米植物病害分类

www.kaggle.com

我使用的数据集

现在是实现部分

步骤1:导入所有必要的库

import numpy as np
from glob import glob
import random
import splitfolders
import os
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore", category=FutureWarning)

我将数据集分成了三部分:训练集、验证集和测试集。

os.makedirs('output1')
os.makedirs('output1/train')
os.makedirs('output1/val')
os.makedirs('output1/test')
loc = "/kaggle/input/corn-or-maize-leaf-disease-dataset/data"
splitfolders.ratio(loc, output="output1", ratio=(0.80, .1, .1))

train_path = '/kaggle/working/output1/train'
val_path = '/kaggle/working/output1/val'

将所有图像的尺寸调整为224×224。

IMAGE_SIZE = [224, 224]

步骤2:导入模型和库

import tensorflow as tffrom keras.layers import Input, Lambda, Dense, Flattenfrom keras.models import Modelfrom keras.applications.vgg16 import VGG16from keras.applications.vgg16 import preprocess_inputfrom keras.preprocessing import imagefrom keras.preprocessing.image import ImageDataGeneratorfrom keras.models import Sequential

步骤3:模型训练

model = VGG16(input_shape=IMAGE_SIZE + [3], weights='imagenet', include_top=False)

IMAGE_SIZE + [3]

在这里,我们包括RGB通道,因为我们的图像是彩色的。

weights=’imagenet’

我们使用ImageNet的权重。

include_top = False

由于VGG16通常期望尺寸为224×224的图像,我们可以通过包含顶部层来适应不同的像素尺寸。

for layer in model.layers:    layer.trainable = False

这一步很关键,因为我们不想重新训练模型中已经训练过的层,所以我们将其设置为false。

之后,我们可以添加我们的密集层。

x = Flatten()(model.output)prediction = Dense(len(folders), activation='softmax')(x)model = Model(inputs=model.input, outputs=prediction)model.summary()
Image by Author @tejasrimasina2002

之后,我们编译并拟合模型。

model.compile(optimizer=tf.keras.optimizers.Adam(),             loss='categorical_crossentropy',            metrics = ['accuracy'])

r = model.fit_generator(  training_set,  validation_data=val_set,  epochs=10,  steps_per_epoch=len(training_set),  validation_steps=len(val_set))

输出

我得到了89.92%的验证准确率。

为了对使用迁移学习模型进行玉米分类的实现有一个清晰的理解,您可以在我的GitHub上查看它。我已经用一张图像测试了该模型,并且预测准确。

GitHub – Tejasri-123/Corn-Classification

github.com

在GitHub存储库中,您可以找到本文中包含的所有文件。

谢谢阅读………

Photo by Jon Tyson on Unsplash