项目介绍
小狗分类器可以做什么?
通过这个分类器,你只需要上传照片,就可以得到小狗的品种,以及更多的信息。
这就是所谓的「机器学习」,让机器自己去“学习”。我们今天要做的这个分类任务,是一个“监督学习”的过程。
监督学习的主要目标是从有标签的训练数据中学习模型,以便对未知或未来的数据做出预测。
我给大家讲一个例子。
用“房子的尺寸”预测“房子的价格”
X-房子的尺寸(小狗的图片)
Y-房子的价格(小狗的类别)
如图,我们根据已经有的数据集(图上的坐标),可以拟合出一条近似符合规律的直线。
这样,再有新的房子尺寸(1250),我们就可以估算出房子的价格(220k)了。
有了这些简单的基础,可以开始搞了。
效果展示
训练集的准确率为0.925,但测试集只有0.7
说明过拟合了,可以再增加一些图片,或者使用数据增强,来减少过拟合。
测试了两张图片,全都识别对了!
编写思路
整个分类器的实现,可以分为以下几个部分:
1 准备数据集
我们可以通过爬虫技术,把4类图像(京巴、拉布拉多、柯基、泰迪)保存到本地。总共有840张图片做训练集,188张图片做测试集。
数据集的准备,可以参考上一篇文章,关注(GitPython)查看文章。
2 数据集的预处理
1) 统一尺寸为100*100*3(RGB彩色图像)
2) 由于数据是自己下载的,需要制作标签(label),可提取图像名称的第一个数字作为类别。(重命名图片)
3)划分数据集
840张图片做训练集,188张图片做测试集。
4)把图片转换为网络需要的类型
3 搭建卷积神经网络
Keras是基于TensorFlow的深度学习库,是由纯Python编写而成的高层神经网络API,也仅支持Python开发。
它是为了支持快速实践而对Tensorflow的再次封装,让我们可以不用关注过多的底层细节,能够把想法快速转换为结果。
4 训练
训练的过程,就是最优解的过程。
对上图来说,就是根据数据集,不断的迭代,找到一条最近似的直线(y = kx + b),把参数k,b保存下来,预测的时候直接加载。
5 预测
此时k、b(参数)和x(小狗的图像)都是已知的了,求k(类别)就完了。
# 1.上传图片
name = input('上传图片的名称(例如:XX.jpg)为:')
# 2.预处理图片(代码省略)
# 3.加载权重文件
model.load_weights('dog_weights.h5')
# 4.预测类别
classes = model.predict_classes(x_test)[0]
target = ['京巴','拉布拉多','柯基','泰迪']
# 3-泰迪 2-柯基 1-拉布拉多 0-京巴
# 5.打印结果
print("识别结果为:"+ target[classes])
依赖环境
1 深度学习框架Keras和TensorFlow
2 PIL扩展库(预处理图片)
3 Pycharm/Jupyter notebook
源码
关注公众号【GitPython】,回复【图像识别】