TensorFlow实战之猫狗识别
前言
为了更好的理解Tensorflow,我觉得在看教程的时候,最好还是要进行实战一下,我就以最简单的猫狗识别为例子进行学习好了。这里我假定已经安装配置好了 TensorFlow 的环境,我自己的安装配置可以参考 TensorFlow实战之环境搭建 。
大部分的训练模型的项目的目录结构如下,其实也有简单的,就是参考文章6,我跟着做了
- data文件夹:包含 test 测试集 (有些可能叫 verify 验证集 )和 train 训练集
- log文件夹:保存训练模型和参数
- image文件夹: 存放训练图和预测结果图
- input_data.py:负责实现读取数据,生成批次
- model.py:负责实现神经网络模型
- training.py:负责实现模型的训练以及评估
- test.py: 从测试集中随机抽取一张图片, 进行预测是猫还是狗
先运行training.py来训练模型,训练完再运行test.py来测试图片进行预测猫或狗。
也有比较简单的,高准确率!TensorFlow猫狗识别案例 这篇文章的代码基本上都能运行,使用了VGG模型。这篇文章中我放弃了以往的 model.fit() 训练方法,改用model.train_on_batch方法。此外我也引入了进度条的显示方式,更加方便我们及时查看模型训练过程中的情况,可以及时打印各项指标。
1.cats_vs_dogs 这里用了tensorflow 1进行了一个训练和预测,里面的目录结构倒是可以参考。
2.CNN实现猫狗识别(Tensorflow版本) 包括 数据预处理、网络构建、模型训练 几个步骤。这里只有模型的训练过程,没有验证过程。
3.使用Tensorflow 2进行猫狗分类识别
4.Python——tensorflow2.8猫狗识别 跟着唐宇迪教程做了一遍,中间部分参数做了修改
5.tensorflow2.3实践 猫狗识别(详细步骤注释及93%的准确率) 这里也是使用了 VGG16 模型进行的训练
6.python如何识别猫狗?对狗和猫的照片进行分类(准确率为 97%) 这篇文章的达到了 97%,这里加入了 Dropout 正则化。
7.猫狗识别 这里也提供了代码,是TensorFlow 1.xx版本,有数据集的下载,文件夹分类说明。最终的模型和结果在这个猫狗分类问题上是符合期望的。在项目实施过程中有一点令我印象深刻,那就是任何机器学习问题,都免不了数据预处理、模型构建、模型训练、测试与验证等步骤;但预处理与模型调参可能会占用大部分时间和精力,数据组织方式也会对模型有较大影响。这篇文章也是我所参考的预测的代码。
8.基于卷积神经网络(CNN)的猫狗识别
9.深度学习100例-卷积神经网络(CNN)花朵识别 | 第4天
10.基于CNN的猫狗品种识别技术研究 这是用 CNN 和 PyTorch 实现的
11. lyhue1991 / eat_tensorflow2_in_30_days 这是Tensorflow教程,感觉写的还挺好的。
1.数据准备
下载数据,数据集链接:https://pan.baidu.com/s/1qBmmV-bhm5b1KWey5Zc_rw 提取码:e5rq 。也可以从谷歌上下载。下载之后放到 data 的 train 目录下就可以了。
2.数据预处理
数据预处理的过程,就是包括数据增强,图片变形,归一化等操作。
1 | """查看数据""" |
3.模型构建
这里其实返回了一个VGG16的模型,里面用到了各种卷基层什么的。
1 | from keras import layers, models, Input |
4.模型训练
这里训练模型,使用的就是分批次进行训练,最后保存模型为 model.h5 文件。
1 | import tensorflow as tf |
这里可以看到,验证集的准确率都是 100% 了,感觉有些不正常,这个问题但是跑出的模型倒是能用,这个待以后再探讨。
多训练几次的话,每次的结果都不太一样。
5.测试和验证
原先的代码是从测试数据里面拿到多个图,然后分别判断每张图是什么,这里我直接改成了,给定一张图,判断这张图是什么分类。
1 | import tensorflow as tf |
1.Tensorflow详解猫狗识别(4)–预测 这是tensorflow1.x版本的预测代码
2.利用Tensorflow训练好的模型,来预测或识别单张图片 这也是tensorflow1.xx的代码
3.[使用Tensorflow的Python Keras图像识别 model.predict返回[[0.]] 。](https://www.qiniu.com/qfans/qnso-49482561)
4.TensorFlow 2.0 model的predict()方法详解以及自定义predict实现预测数据和真实数据配对输出
5.Keras中predict()方法和predict_classes()方法的区别
6.tensorflow2加载图片
7.Keras model.predict输出的概率值转换为类别 predict函数训练后返回一个概率值数组,此数组的大小为n·k,第i行第j列上对应的数值代表模型对此样本属于某类标签的概率值,行和为1。例如预测结果为:[[0.66651809 0.53348191],代表预测样本的标签是0的概率为0.66651809,1的概率为0.53348191。这里还有一个需要注意的地方,本人在实际操作时发现,使用predict_classes()会出现报错:’Model’ object has no attribute ‘predict_classes’。这是因为本系统在搭建模型时,先进行了神经网络的编写,之后使用model = Model(input=inp, output=outp)方法,此时这种综合起来的方法无法使用predict_classes(),所以需要配合numpy.argmax()方法将样本最大概率归属类别的值转化为样本的预测数组。
6.迁移学习
1.想正确识别猫狗?理论+实例+代码一文搞定