这个是一个多分类问题,我们先看一下这个数据集

首先我们有一个文件夹叫birds_train

这个文件夹中有200个子文件夹,每一个文件夹中都是一种鸟类的照片

我们打开一个文件夹

其中有39张该鸟类的图片,这个数据量对于训练来讲是很少的,加之我们有200个分类,所以最终如果从网上单拎出一张图片来测试,效果不会很好

  • 当然这个都是鸟也很大程度上会影响结果,就算是给人看所有图片,然后随便拿一张数据集之外的图片令其说出是哪一种的鸟也很困难

目录

1  导入库

2  数据处理

2.1  获取所有图像路径

2.2  提取所有图像标签

2.3  将标签与序号对应

2.4  随机数据

2.5  选取训练数据与测试数据

3  创建数据集

4  设置重复,乱序与批次

5  建立模型

6  编译模型

7  训练模型

8  读取模型

9  预测模型


1  导入库

2  数据处理

2.1  获取所有图像路径

我们依然先使用glob获取所有图片路径字符串列表

我们打印出来其中一张图片的路径看一下

2.2  提取所有图像标签

我们要提取的是字符串中间的 Black_footed_Albatross ,简单的一种方法是使用两个split,第一个的参数是\\,第二个的参数是点

我们现在要获取所有种类的label就不要一个一个写了,因为一共有200多个,这里我们使用np.unique(),这个方法可以寻找到列表中的唯一值

2.3  将标签与序号对应

我们现在需要给每个标签一个序号,这里我们用到了enumerate()方法,在这里我介绍过 python内建方法_potato123232的博客-CSDN博客

我们显示出来看一下

我们在预测的时候还需要 序号对标签 的字典(因为不是二分类了,我们如果通过if...else...处理会很麻烦)

现在我们使用label_to_index获取所有的序号标签

2.4  随机数据

上面的所有数据我们注意到是没有进行随机的,没有随机的数据是对训练的效果是有影响的,所以我们需要随机数据,在这里我们介绍一种随机数据的新方法

我们首先使用np.random.seed()设置随机种子,随机种子的参数是任意整形数据,设置随机种子的目的是,无论在那一台电脑,随机多少次,随机的结果都是一样的

之后我们创建长度为图片数量的连续随机整形数组,使用的方法为np.random.permutation(),参数为数组的长度

之后我们以random_index作为索引乱序imgs_path与all_labels,直接写出来看起来会很迷惑,我们先举个例子

我们当前顺序索引前四个值

发现返回的结果是按也是按顺序排列的

那么我现在把index换成几个随便写的数

我们发现返回值也是按我们写的数排列的,也就是现在的第0张是原数据集的第99张,现在的第1张,是原来的第149张,由于我们索引是固定的,只要原来的imgs_path与all_labels对应,那么重新排序后的imgs_path与all_labels依然对应

我们现在把后面的索引换为刚刚生成的random_index

2.5  选取训练数据与测试数据

我们定义前80%的数据为训练数据,其余为测试数据

之后定义路径与标签,从0-train_count是训练用的,从train_count-最后一个是测试用的

3  创建数据集

首先创建训练集

然后创建测试集

我们发现现在传入的是路径,在之前的 卫星图片分类 代码中我们是先读取的图片,然后创建的数据集,此处我们先用路径创建数据集,再进行图片读取

  • 只是展示出来还有这种方法可以操作,读取图片与创建数据集的顺序对不影响任何东西

我们现在定义读取图片的函数

我们上面的这个函数要直接对train_ds与test_ds进行操作,这两个数据集中是有label的,所以我们的参数要写label,即使我们不对label执行任何操作,我们加载图片的方式与卫星图片分类加载图片的方式相同,每一行是什么意思可以看一下这个 15.卫星图片分类_potato123232的博客-CSDN博客

之后我们使用map对数据集执行load_img(),我们在这里介绍一下多线程的概念,首先我们定义变量AUTOTUNE,令其获取到自适应合适的线程数

  • 合适的线程数与cpu有关,与gpu无关

之后使用map,我们在这里多定义一个num_paraller_calls

测试集也用相同的方式处理

4  设置重复,乱序与批次

5  建立模型

我们的模型是这样的

  • 我们称没有激活的输出为logits,我们会得到200个概率值,这些概率值加起来为1,其中的最大值就是它的预测结果

我们引入了上一章的批标准化层,在输出层,此次我们不加激活函数,不加激活函数只是为了展示后续的操作,对训练的结果没有影响

我们看一下模型整体

6  编译模型

由于我们输出层没有激活函数,所以from_logits置为True,损失函数为SparseCategoricalCrossentroy,该损失函数应用在多分类问题的顺序编码的情况

7  训练模型

  • 训练的过程会比较久,我们如果运行中出现内存问题,我们要减少batch

训练之后我们绘制出acc与loss的曲线看一下

  • acc

  • loss

通过曲线我们可以发现acc依然有上升的趋势,loss依然有下降的趋势,我们增加epoch有可能会有更好的效果

之后我们将模型保存一下,以便之后进行预测

我们确认一下生成了这个文件夹

8  读取模型

首先我们先读取模型

这个时候我们就再另一个新开的py文件中读取模型了

  • 其余两个库下面会用到

由于我们的分类比较多,所以我们要使用之前定义的index_to_label,所以在这个文件中,要把之前的index_to_label复制进来

9  预测模型

首先我们需要把图像加载进来,但是我们不能使用之前的加载函数,因为之前是对整个数据集进行操作,现在是对单张图片进行操作,所以我们要这样写

  • 与之前的处理方式相同,只是去掉了label

之后我们定义预测函数,加载图像后提升维度,然后使用model.predict()进行预测,这个时候得到的结果是200个概率值的集合(我们下面会举个例子看一下),之后我们使用argmax()获取最大值的索引,再之后使用index_to_label获取到最大值索引对应的标签名称

我们现在找一张图片测试一下

这张图片的结果正确与否不是很重要,如果要追求准确度,最好的办法还是加大数据量

首先出现的是200个概率值

之后是机器给的预测结果

17.200种鸟类图片分类相关推荐

  1. 基于android手机相册,基于安卓的手机图片分类软件的设计与实现.pdf

    ELECTRONICS WORLD ・技术交流 基于安卓的手机图片分类软件的设计与实现 武警工程大学研究生管理大队12队 张 鑫 武警广州指挥学院 姜 波 [摘要] 本文针对安卓手机中图片浏览器的快速 ...

  2. 【神经网络】(6) 卷积神经网络(VGG16),案例:鸟类图片4分类

    各位同学好,今天和大家分享一下TensorFlow2.0中的VGG16卷积神经网络模型,案例:现在有四种鸟类的图片各200张,构建卷积神经网络,预测图片属于哪个分类. 1. 数据加载 将鸟类图片按类分 ...

  3. 细粒度图像分类_1.1、 图片分类

    记录图像分类论文资源列表. 图片分类任务可以分为:粗粒度图片分类.细粒度图片分类. 2012 AlexNet :ImageNet Classification with Deep Convolutio ...

  4. 动手深度学习13——计算机视觉:数据增广、图片分类

    文章目录 一.数据增广 1.1 为何进行数据增广? 1.2 常见图片增广方式 1.2.1 翻转 1.2.2 切割(裁剪) 1.2.3 改变颜色 1.2.4 综合使用 1.3 使用图像增广进行训练 1. ...

  5. CV赛事|“华为云杯”2020深圳开放数据应用创新大赛•生活垃圾图片分类

    赛题背景 本赛事是深圳开放数据应用创新大赛(简称SODiC)中算法赛道的一道赛题. 主办单位:深圳市政务服务数据管理局.深圳市南山区人民政府 承办单位:深圳市南山区政务服务数据管理局.华为技术有限公司 ...

  6. 快速实践大规模轻量级图片分类模型:飞桨识图 PP-ShiTu

    快速实践大规模图片分类模型:飞桨识图 PP-ShiTu 飞桨识图PP-ShiTu是轻量级图像识别系统,集成了目标检测.特征学习.图像检索等模块,广泛适用于各类图像识别任务.CPU上0.2s即可完成在1 ...

  7. 宠物狗图片分类之迁移学习代码笔记

    五月两场 | NVIDIA DLI 深度学习入门课程 5月19日/5月26日一天密集式学习  快速带你入门阅读全文> 正文共3152个字,预计阅读时间8分钟. 本文主要是总结之前零零散散抽出时间 ...

  8. lda进行图片分类_基于SIFT+Kmeans+LDA的图片分类器的实现

    题记:2012年4月1日回到家,南大计算机研究僧复试以后,等待着的就是独坐家中无聊的潇洒.不知哪日,无意中和未来的同学潘潘聊到了图像处理,聊到了她的论文<基于LDA的行人检测>,出于有一年 ...

  9. keras提取模型中的某一层_Keras做图片分类(四):迁移学习--猫狗大战实战

    本项目数据集来自kaggle竞赛,地址: https://www.kaggle.com/c/dogs-vs-cats-redux-kernels-edition/data 数据的训练集放在train文 ...

最新文章

  1. SAP WM LRFMD中Variant参数的影响初探
  2. python里的类与一切事物都是对象
  3. redis的学习使用,第二章
  4. leetcode 646. Maximum Length of Pair Chain | 646. 最长数对链(暴力递归->傻缓存->dp)
  5. Web控件文本框Reset的功能
  6. windows2003下防火墙ISA大型实验
  7. 全国计算机等级考试题库二级C操作题100套(第51套)
  8. html数据复制到剪切板
  9. android之相机开发
  10. 字节新产品「识区APP」上线
  11. 利用nc测试服务器之间端口之间的连通性
  12. 2020网上答题拿证书的竞赛_参赛答题拿证书—全国大学生知识竞赛
  13. 关于回车自动跳转的问题,能不能有选择的跳转??
  14. 使用Flash air操作本地文件
  15. 2021暑假Leetcode刷题——Two Pointers(2)
  16. 邮件合并保存为一个个单独的文档_用【邮件合并】提升10倍高效生产力
  17. 关于javaBean运行后出现Name was not previously introduced as per JSP.5.3的解决方法
  18. tair用ldb做分布式存储
  19. Android安卓——Android程序生命周期
  20. 什么是JPA?Java持续性介绍

热门文章

  1. YAD2K中test_yolo报错PermissionError: [Errno 13] Permission denied: 'images\\out'
  2. 物联网LoRa系列-30:LoRaWAN A类/C类终端的载波信道资源与时间资源上下行调度算法
  3. 嵌入式常用的算法 - 二阶IIR低通滤波器
  4. 常用9011-9018三极管参数
  5. Eclipse Javaee版本下载与安装(不含jdk)
  6. 《微信思维》摘录(一)
  7. GBase 8a trace 日志
  8. SpringBoot常见问题私人理解
  9. 精巧结构设计PDF版
  10. 如何解决QQ在线客服未启用问题