用 Keras 进行针对图像分类的学习转移,这里有一篇教程

在本教程中,您将学习如何为图像分类任务进行转移学习。 Keras的高级API使超级简单,只需几个简单的步骤。

用 Keras 进行针对图像分类的学习转移,这里有一篇教程

Keras

在本教程中,您将学习如何为图像分类任务进行转移学习。 Keras的高级API使超级简单,只需几个简单的步骤。

转移学习使我们能够使用少得多的数据来训练深度网络,而如果我们从头开始训练的话,我们将需要它。 通过转移学习,我们实际上是在将模型从先前任务中学到的“知识”转移到我们当前的任务。 这个想法是,这两个任务不是完全脱节的,因此,我们可以利用模型通过广泛的培训中学到的任何网络参数,而不必自己进行培训。

传递学习已得到一致证明,可以提高模型的准确性并减少所需的培训时间。 数据更少,时间更少,准确性更高。

加载东西

我们要做的第一件事是准备我们的数据。 对于Keras中的图像分类,最简单的方法是将数据分类到每个类的文件夹中。 例如,如果您的数据集具有3类:Pizza,Burger和Taco,则您应具有3个文件夹,分别称为Pizza,Burger和Taco。 您的每个文件夹都应包含该特定类的图像。 您的文件夹结构应如下所示:

用 Keras 进行针对图像分类的学习转移,这里有一篇教程

接下来,我们可以选择要对其进行转移学习的模型。 Keras为此提供了许多选择。在做出选择时,您可以粗略地相信(出于此处的目的),较小的模型(以MB为单位)将更快但精度较低,而较大的模型将较慢但更准确。截至今天为止,MobileNet是最快的,而NASNetLarge是最准确的。今天,我们将选择处于中间位置的ResNet50模型。

查看下面的代码。我们首先导入必要的模型和预处理功能。 ResNet50模型经过了非常特殊的预处理训练,我们将希望对其进行重新使用以对其进行适当的训练。注意,当我们初始化基本模型时,如何设置include_top = False。此设置很重要,因为这意味着我们不会在模型的末尾保留全连接(FC)层。这正是我们想要的,因为我们将训练我们自己的全新FC层进行迁移学习。

用 Keras 进行针对图像分类的学习转移,这里有一篇教程

流动数据

现在,我们需要创建一个数据生成器,以实际方式自动从文件夹中获取数据并进入Keras。 Keras为此提供了方便的python生成器功能。

用 Keras 进行针对图像分类的学习转移,这里有一篇教程

我们定义我们的训练目录“ food_dataset”,其中包含我们之前设置的每个图像类别的文件夹。 我们还定义了图像尺寸和批量大小。 Keras生成器将使用双线性插值自动将所有加载的图像调整为target_size的大小。 我们将在生成器中添加一些额外的数据增强功能(翻转和旋转),以尝试提高模型的准确性。 我们使用flow_from_directory函数创建最终生成器,该函数将使用队列来保持连续的加载和准备图像流!

弹出层

现在是时候为过渡学习建立我们的最终模型了。如果将来要再次使用它,可能会发现为它编写函数非常方便。您可以从下面开始。

首先冻结所有基本模型的图层。我们不想训练这些层,因为我们试图利用网络从以前的数据集(在本例中为ImageNet)中学到的知识。通过设置layer.trainable = False,我们告诉Keras在训练期间不要更新这些权重,这正是我们想要的!

现在,我们可以添加FC层。由于许多网络具有多个FC层,因此我们循环执行此操作,并且遍历列表使事情变得简单明了。我们还将在每个FC层中添加一些删除项,以减少过度拟合的机会(此部分是可选的)。最后,我们添加最后的Softmax层并构建Keras模型。

一旦我们的功能全部设置好,创建最终模型就很简单。只需传递softmax层的类数,列表中FC层的大小(因为我们对其进行循环)以及丢失概率。

用 Keras 进行针对图像分类的学习转移,这里有一篇教程

训练

最后一步是设置我们的培训,然后单击红色的大按钮使其全部运行!

我们将使用亚当优化器,将其学习率值设置为较小的值。 我们选择Adam是因为它相对于SGD而言超级易用。 我们将学习率设置为较小,因为我们仅在这里微调模型,尤其是FC层; 我们不希望进行任何重大更改,而只是进行调整。

我们还将设置一些检查点以保存权重以供以后使用。 应用fit_generator函数可运行整个训练方案,并带有可选的时期数,批处理大小和数据改组。 训练完成后,我们可以使用历史记录输出训练结果。 瞧,转学!

用 Keras 进行针对图像分类的学习转移,这里有一篇教程

喜欢学习吗?

在Twitter上关注我,在其中发布有关最新,最出色的AI,技术和科学的所有信息! 也在LinkedIn上与我联系!

推荐读物

想更多地了解深度学习? 《使用Python进行深度学习》这本书将教您如何使用有史以来最简单的Python库进行真正的深度学习:Keras!


本文编译自 | towardsdatascience.com 译者 | Yafei

本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「我们」留言处理。

(0)
Afenxi朋友们的头像Afenxi朋友们编辑
上一篇 2019-11-03 15:39
下一篇 2019-11-03 15:50

相关文章

  • 深度增强学习前沿算法思想

    文 | Flood Sung 2016年AlphaGo计算机围棋系统战胜顶尖职业棋手李世石,引起了全世界的广泛关注,人工智能进一步被推到了风口浪尖。而其中的深度增强学习算法是AlphaGo的核心,也是通用人工智能的实现关键。本文将带领大家了解深度增强学习的前沿算法思想,领略人工智能的核心奥秘。 前言 深度增强学习(Deep Reinforcement Lea…

    2017-10-03
    0
  • Word2Vec揭秘: 这是深度学习中的一小步,却是NLP中的巨大跨越

    Word2Vec模型用于学习被称为“词嵌入”的词的向量表示。这通常是作为预处理步骤来完成的,在此之后,学习到的向量被输入判别模型(通常是RNN)来生成预测,完成各种各样有趣的事情。

    2019-10-22
    0
  • 史上最全的机器学习资料(下)

    机器学习牵涉的编程语言十分之广,包括了MATLAB、Python、Clojure、Ruby等等。为了让开发者更加广泛、深入地了解机器学习,云栖社区组织翻译了GitHub Awesome Machine Learning 资源,涵盖24种编程语言的机器学习的框架、库以及其他相关资料。

    2016-06-06
    0
  • 硅谷王川:深度学习有多深?学了究竟有几分?(11)

    (1)迄今为止我们讨论的神经网络模型, 都属于一种叫做前馈网络 (feedforward network) 的东西. 简而言之, 前馈网络, 信息从底层不断往前单向传输,故而得名. RNN (Recurrent Neural Network), 也称循环神经网络, 多层反馈神经网络, 则是另一类非常重要的神经网络. 本质上, RNN 和前馈网络的区别是, 它…

    2016-04-28
    0
  • 用深度学习快速人脸建模

    我们构建了一个快速的、交互的、基于深度学习的人脸建模框架。通过简单勾勒人脸图画(caricature),我们的模型可以迅速生成对应的三维人脸模型,并且可以同时拟合面部轮廓和细节表情。

    2019-07-15
    0
关注我们
关注我们
分享本页
返回顶部