最新公告
  • 欢迎光临数据科学与编程,我们是数据学科学兴趣交流小组立即加入我们
  • 基于迁移学习的狗狗分类器

    你以前听说过深度学习这个词吗? 或者你刚刚开始学习它?

    在本文中,我将引导您构建自己的狗狗分类器。在这个项目的最后:

    • 您的代码将接受任何用户提供的图像作为输入

    • 如果一只狗在图像中被检测到,它将提供对该狗狗品种的预测

    我会让它尽可能的简单~

    实现步骤如下:

    • 步骤0:导入数据集

    • 步骤1:图像预处理

    • 步骤2:选择迁移学习的模式

    • 步骤3:更改预训练模型的分类器

    • 步骤4:编写训练算法

    • 步骤5:训练模型

    • 步骤6:测试模型

    • 步骤7:测试你自己的图

    步骤0:导入数据集

    你可以从下列网址下载你自己的数据集:https://www.kaggle.com/c/dog-breed-identification

    然后解压缩文件!

    由于图像处理在本地机器上需要大量的时间和资源,因此我将使用 colab 的 GPU 来训练我的模型。所以,如果你没有自己的 GPU,也可以切换到 colab 来跟进。

    导入必要的库始终是一个良好的开始,下面代码展示了我们训练所需要的库。

    将图像存储到数据加载器中现在我们需要将训练、验证和测试目录加载到数据加载器中。这将使我们能够将数据分成小批量。我们将数据以key-value的格式进行存储,这将有助于以后调用它们。

    步骤2:选择迁移学习的模式

    什么是预训练模型,我们为什么要使用它?

    预训练模型是别人为解决类似问题而创建的模型。

    • 与其从零开始构建模型来解决类似的问题,不如使用经过其他问题训练的模型作为起点

    • 一个预训练模型在应用程序中可能不是100% 准确,但是它节省了重新发明轮子所需的巨大努力

    • 迁移学习可以利用在一个问题上学到的特性,并在一个新的、类似的问题上利用它们。例如,一个已经学会识别小浣熊的模型的特征可能有助于开始训练一个用于识别猫咪的模型

    你可以选择几个事先训练过的模特进行模特训练。例如 Densenet,Resnet,VGG 模型。我将使用 VGG-16进行模型训练。

    步骤3:更改预训练模型的分类器

    将采取以下步骤来改变预训练分类器:

    1. 从以前训练过的模型中取出网络层

    2. 冻结它们,以避免在以后的训练回合中破坏它们所包含的任何信息

    3. 在冻结层上添加一些新的、可训练的图层。他们将学习在新的数据集上将旧的特性转化为预测

    4. 在你的数据集上训练新的网络层

    由于特征已经学会了预训练的模型,所以将冻结他们在训练期间对狗狗的形象。我们只会改变分类器的尺寸,只会训练它。

    原来的分类器层有25088个维度,但是为了匹配我们的预处理图像大小,我们需要更改为4096。

    现在我们需要选择一个损失函数和优化器。

    利用损失函数计算模型预测值与实际图像的误差。如果你的预测完全错误,你的损失函数将输出更高的数字。如果它们非常好,那么输出的数字就会更低。本文将使用交叉熵损失。

    优化器是用来改变神经网络属性的算法或方法,比如权重和学习速度,以减少损失。本文将使用 SGD 优化器。

    步骤4:编写训练算法

    接下来我们将编写训练函数。

    我用它编写了验证代码行。所以在训练模型时,我们会同时得到两种损失。

    步骤5:训练模型

    现在,我将开始通过在函数中提供参数来训练模型。我将训练10个epoch。

    步骤6:测试模型

    现在我将在模型以前从未见过的新图像上测试模型,并计算预测的准确性。

    Output:Test Loss: 0.542430 Test Accuracy: 83% (700/836)

    我已经训练了它10个 epoch,得到了83% 的准确率。并且,得到以下输出!

    如何提高这个模型的准确性?

    • 通过训练更多的 epoch(比较训练和验证损失)

    • 通过改变学习率(比如0.01,0.05,0.1)

    • 通过改变预训练模型(像稠密网络,但需要更多的训练时间)

    • 通过对图像的进一步预处理

    步骤7:测试你自己的图片

    现在你已经训练和测试了你的模型。现在,这是最令人兴奋的部分。你能走到这一步真是太好了。

    1.将要测试和保存的新图像加载到内存中

    2. 现在我们必须对图像进行预处理,并通过测试我们训练好的模型来预测类

    3. 现在,通过将图像路径作为参数传递给这个函数,我们可以预测狗狗的品种。
    我已经传递了下面的图像,并得到了下列输出。

    这只是一个开始,你可以用这个模型做更多的事情。你可以通过部署它来创建一个应用程序。我尝试从零开始创建自己的模型,没有使用迁移学习,但测试的准确率不超过13% 。你也可以尝试一下,因为这有助于理解概念。

    本站上原创文章未经作者许可,不得用于商业用途,仅做学习交流使用,本站免责声明。转载请注明出处,否则保留追究法律责任的权利。《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
    数据科学与编程 » 基于迁移学习的狗狗分类器

    发表评论

    • 52会员总数(位)
    • 320资源总数(个)
    • 25本周发布(个)
    • 3 今日发布(个)
    • 333稳定运行(天)

    提供最优质的博文资源集合

    立即阅览 了解详情