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

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

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

目录
相关文章
|
缓存 JavaScript
Vue computed详解
computed是Vue中一个计算属性,它可以根据依赖的数据动态计算出一个新的值,并将其缓存起来。computed属性是基于它们的依赖进行缓存的,只有当依赖发生变化时,才会重新计算。 computed属性具有以下特性: • 缓存:computed属性会缓存计算结果,在依赖不变时直接返回缓存值,提高性能。 • 响应式:当依赖发生变化时,computed属性会自动重新计算并更新。 • 依赖追踪:Vue会自动追踪computed属性所依赖的数据,并在其发生变化时触发重新计算。
542 0
|
5月前
|
Web App开发 前端开发 测试技术
跨浏览器测试实战:使用Playwright测试Chrome、Firefox和Safari
本文介绍如何使用Playwright进行高效跨浏览器测试,解决前端兼容性难题。支持Chromium、Firefox、WebKit,提供统一API,结合实战案例与最佳实践,助力开发者快速发现并修复问题,提升产品质量与用户体验。
|
前端开发 Java 调度
SpringCloud微服务实战——搭建企业级开发框架(四十二):集成分布式任务调度平台XXL-JOB,实现定时任务功能
定时任务几乎是每个业务系统必不可少的功能,计算到期时间、过期时间等,定时触发某项任务操作。在使用单体应用时,基本使用Spring提供的注解即可实现定时任务,而在使用微服务集群时,这种方式就要考虑添加分布式锁来防止多个微服务同时运行定时任务而导致同一个任务重复执行。
2336 55
SpringCloud微服务实战——搭建企业级开发框架(四十二):集成分布式任务调度平台XXL-JOB,实现定时任务功能
|
数据采集 人工智能 DataWorks
限时优惠体验!DataWorks数据治理中心全新升级为数据资产治理
DataWorks进行全面升级,从数据治理中心转型为数据资产治理,强调业务视角下的数据分类与管理,引入Data+AI全链路数据血缘追踪,提升数据质量和安全性,促进跨部门协作。同时,提供限时优惠活动,助力企业高效利用数据资产。
1404 2
|
缓存 弹性计算 运维
网络管理利器:掌握常用的CMD命令
本文介绍了常用的网络CMD命令及其用法,包括`ping`、`ipconfig`、`tracert`、`nslookup`、`netstat`、`route`、`telnet`、`ftp`、`netsh`、`arp`、`nbtstat`、`hostname`、`systeminfo`、`ipconfig /flushdns`和`tasklist`。这些命令在日常的网络管理和故障排查中非常实用,帮助你轻松进行网络诊断、配置和监控。
1822 1
|
Android开发
Android LayoutInflater.from(context).inflate()方法的作用
Android LayoutInflater.from(context).inflate()方法的作用
313 0
|
Java 关系型数据库 应用服务中间件
基于SpringBoot+Vue的B2B平台的医疗病历交互系统(1)
基于SpringBoot+Vue的B2B平台的医疗病历交互系统
207 0
|
计算机视觉 Python
图片进行标记
图片进行标记
610 1