开发者社区> 小詹学Python> 正文

小狗分类器,你家的狗子是个什么狗?

简介: 小狗分类器可以做什么?通过这个分类器,你只需要上传照片,就可以得到小狗的品种,以及更多的信息。这就是所谓的「机器学习」,让机器自己去“学习”。我们今天要做的这个分类任务,是一个“监督学习”的过程。

image.png

项目介绍

小狗分类器可以做什么?
通过这个分类器,你只需要上传照片,就可以得到小狗的品种,以及更多的信息。
这就是所谓的「机器学习」,让机器自己去“学习”。我们今天要做的这个分类任务,是一个“监督学习”的过程。
监督学习的主要目标是从有标签的训练数据中学习模型,以便对未知或未来的数据做出预测。
我给大家讲一个例子。
用“房子的尺寸”预测“房子的价格”
image.png

图片来自(吴恩达-机器学习)

X-房子的尺寸(小狗的图片)
Y-房子的价格(小狗的类别)

如图,我们根据已经有的数据集(图上的坐标),可以拟合出一条近似符合规律的直线。
这样,再有新的房子尺寸(1250),我们就可以估算出房子的价格(220k)了。
有了这些简单的基础,可以开始搞了。

效果展示

训练集的准确率为0.925,但测试集只有0.7
说明过拟合了,可以再增加一些图片,或者使用数据增强,来减少过拟合。

image.png

测试了两张图片,全都识别对了!

image.png

编写思路

整个分类器的实现,可以分为以下几个部分:

1 准备数据集

我们可以通过爬虫技术,把4类图像(京巴、拉布拉多、柯基、泰迪)保存到本地。总共有840张图片做训练集,188张图片做测试集。
数据集的准备,可以参考上一篇文章。
image.png

点击上图,阅读原文

2 数据集的预处理

1) 统一尺寸为1001003(RGB彩色图像)

image.png

2) 由于数据是自己下载的,需要制作标签(label),可提取图像名称的第一个数字作为类别。(重命名图片)

image.png

3)划分数据集

840张图片做训练集,188张图片做测试集。

4)把图片转换为网络需要的类型

只放了训练集的代码,测试集一样操作。
ima_train = os.listdir('./train')

图片其实就是一个矩阵(每一个像素都是0-255之间的数)(1001003)
1.把图片转换为矩阵
def read_train_image(filename):

img = Image.open('./train/' + filename).convert('RGB')
return np.array(img)

x_train = []
2.把所有的图片矩阵放在一个列表里 (840, 100, 100, 3)
for i in ima_train:

x_train.append(read_train_image(i))

x_train = np.array(x_train)
3.提取kind类别作为标签
y_train = []
for filename in ima_train:

y_train.append(int(filename.split('_')[0]))

标签(0/1/2/3)(840,)
y_train = np.array(y_train)

我是因为重命名图片为(1/2/3/4),所以都减了1
为了能够转化为独热矩阵
y_train = y_train - 1

4.把标签转换为独热矩阵
将类别信息转换为独热码的形式(独热码有利于神经网络的训练)
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)
print(y_test)

x_train = x_train.astype('float32')
x_test = x_test.astype('float32')

x_train /= 255
x_test /= 255
print(x_train.shape) # (840, 100, 100, 3)
print(y_train.shape) # (840,)

3 搭建卷积神经网络

Keras是基于TensorFlow的深度学习库,是由纯Python编写而成的高层神经网络API,也仅支持Python开发。

它是为了支持快速实践而对Tensorflow的再次封装,让我们可以不用关注过多的底层细节,能够把想法快速转换为结果。
image.png

4 训练

训练的过程,就是最优解的过程。

image.png

对上图来说,就是根据数据集,不断的迭代,找到一条最近似的直线(y = kx + b),把参数k,b保存下来,预测的时候直接加载。
image.png

5 预测

此时k、b(参数)和x(小狗的图像)都是已知的了,求k(类别)就完了。
image.png
作者:GitPython

来源:微信公众号 小詹学Python

版权声明:如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:developerteam@list.alibaba-inc.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
上一篇:Python 制作微信全家福,你就是朋友圈最亮的仔! 下一篇:在Win上做Python开发?当然是用官方的MS Terminal和VS Code了
官网链接