keras图片数字识别入门AI机器学习

news2024/9/26 1:17:29

通过使用mnist(AI界的helloworld)手写数字模型训练集,了解下AI工作的基本流程。

本例子,要基于mnist数据集(该数据集包含了【0-9】的模型训练数据集和测试数据集)来完成一个手写数字识别的小demo。

mnist数据集,图片大小是28*28的黑白。包含了6w 训练数据和1w验证数据。

麻雀虽小五脏俱全。通过这个CV类型的demo需求,我们会学到神经网络模型。

从数据加载,到数据预处理,再到训练模型,保存模型。然后再通过模型来预测我们输入的图片数字。

通过整个过程下来,对于像我这样初识AI深度学习者来说,可以有一个非常好的体感。

我们通过keras+tensorflow2.0来上手。

数据加载

keras 框架,提供了现成的方法来获取mnist数据集

(x_train_image, y_train_label), (x_test_image, y_test_label) = mnist.load_data()

这个方法会返回两组数据集
train_image,train_label ,训练数据集、分类标签
x_test_image, y_test_label,验证数据集、分类标签

要想让机器识别一个图片,需要对图片进行像素化,将像素数据转换成 张量 矩阵数据。

mnist.load_data() 返回的就是已经转换好的张量矩阵数据。

(在python中,通过NumPy多维数组表示。)

数据预处理

我们这个demo属于AI for CV 方向。

CV信息首先要像素化处理,拿到张量信息。

# 转换成一维向量 28*28=784
x_train = x_train_image.reshape(60000, 784)
x_test = x_test_image.reshape(10000, 784)

# 标准化0-1
x_Test_normalize = x_test.astype('float32') / 255
x_Train_normalize = x_train.astype('float32') / 255

通过reshape方法将三维转换成二维,同时通过量化将计算数据缩小但是不影响模型训练识别。
(mnist图片数据是黑白,位深为8位,0-255表示像素信息)。

mnist

通过可视化,我们能大概看到图片的数字特征是怎么被感知到的。

同时将label标签数据转换成0-1的矩阵。

# 将训练集和测试集标签都进行独热码转化
y_TrainOneHot = np_utils.to_categorical(y_train_label)
y_TestOneHot = np_utils.to_categorical(y_test_label)

构建模型

# 建立Sequential 模型
model = Sequential()
# 建立输入层、隐藏层
model.add(Dense(units=256,input_dim=784,kernel_initializer='normal',activation='relu'))
# 建立输出层
model.add(Dense(units=10,kernel_initializer='normal',activation='softmax'))

# 定义模型训练参数
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

定义神经网络模型参数。这里每一个参数都是一个非常深的学科,但是工程使用了解下就可以了。

训练模型

# 开始训练
train_history = model.fit(x=x_Train_normalize, y=y_TrainOneHot,
                              validation_split=0.2, epochs=10, batch_size=200, verbose=2)
# 显示训练过程
show_train_history(train_history, 'accuracy', 'val_accuracy')

mnist

随着训练次数不断增加,整个精确度也越来越高。

我们看下训练过程的日志。

Epoch 1/10
240/240 - 3s - loss: 0.1211 - accuracy: 0.8309 - val_loss: 0.0564 - val_accuracy: 0.9228 - 3s/epoch - 11ms/step
Epoch 2/10
240/240 - 1s - loss: 0.0492 - accuracy: 0.9312 - val_loss: 0.0392 - val_accuracy: 0.9470 - 831ms/epoch - 3ms/step
Epoch 3/10
240/240 - 1s - loss: 0.0360 - accuracy: 0.9495 - val_loss: 0.0313 - val_accuracy: 0.9570 - 890ms/epoch - 4ms/step
Epoch 4/10
240/240 - 1s - loss: 0.0286 - accuracy: 0.9598 - val_loss: 0.0278 - val_accuracy: 0.9610 - 900ms/epoch - 4ms/step
Epoch 5/10
240/240 - 1s - loss: 0.0239 - accuracy: 0.9675 - val_loss: 0.0243 - val_accuracy: 0.9679 - 1s/epoch - 5ms/step
Epoch 6/10
240/240 - 1s - loss: 0.0204 - accuracy: 0.9723 - val_loss: 0.0224 - val_accuracy: 0.9698 - 1s/epoch - 5ms/step
Epoch 7/10
240/240 - 1s - loss: 0.0177 - accuracy: 0.9772 - val_loss: 0.0210 - val_accuracy: 0.9714 - 1s/epoch - 4ms/step
Epoch 8/10
240/240 - 1s - loss: 0.0155 - accuracy: 0.9805 - val_loss: 0.0201 - val_accuracy: 0.9729 - 984ms/epoch - 4ms/step
Epoch 9/10
240/240 - 1s - loss: 0.0137 - accuracy: 0.9833 - val_loss: 0.0189 - val_accuracy: 0.9742 - 1s/epoch - 5ms/step
Epoch 10/10
240/240 - 1s - loss: 0.0122 - accuracy: 0.9861 - val_loss: 0.0182 - val_accuracy: 0.9751 - 975ms/epoch - 4ms/step

可以看到,每一轮训练,loss 的值在逐步变小,accuracy 在逐步增加。

每一次训练,模型中的损失函数在计算出一个参数给到优化器进行反向传播,不断的调整神经元的权重。

模型训练好之后,需要用测试数据集来验证模型的准确度。

scores = model.evaluate(x_Test_normalize, y_TestOneHot)
print('accuracy=', scores[1])
accuracy= 0.975600004196167

保存模型

mode.save()
model.save('model.h5') #也可以保存到具体的文件中

保存的模型里面具体是什么,了解神经网络原理之后,大概能明白。其实模型里最重要的是 神经元的权重值
这个demo的模型我放到这里了。
(https://gitee.com/wangqingpei/blogimages/blob/master/mnist-helloworld/test/model-mnist/model.h5)

预测数据

我们准备几个手写的数字测试下。
mnist

读取本地图片文件

def get_local_image():
    img = Image.open('3.png')
    img = img.convert('L').resize((28, 28))
    img_array = np.array(img)
    # 将像素值转换为0-1之间的浮点数
    img_array = img_array.astype('float32') / 255.0
    img_array_result = np.reshape(img_array, (1, 784))

    return img_array_result

mnist

加载模型进行预测

def autoNumberWord():
    model = load_model("/Users/wangqingpei/Downloads/test/model-mnist/model.h5")
    img = get_local_image()
    prediction = model.predict(img)
    prediction_result = np.argmax(prediction)
    print('本地文件预测:', prediction_result)
240/240 - 1s - loss: 0.0130 - accuracy: 0.9843 - val_loss: 0.0183 - val_accuracy: 0.9755 - 848ms/epoch - 4ms/step
Epoch 10/10
240/240 - 1s - loss: 0.0116 - accuracy: 0.9866 - val_loss: 0.0177 - val_accuracy: 0.9761 - 873ms/epoch - 4ms/step
313/313 [==============================] - 1s 2ms/step - loss: 0.0167 - accuracy: 0.9767
accuracy= 0.9767000079154968
1/1 [==============================] - 0s 116ms/step
Backend MacOSX is interactive backend. Turning interactive mode on.
本地文件预测: 3

学会使用AI数字助手 chartGPT

在学习过程中,遇到问题要改变习惯,用chartGPT。~_~

在学习这个demo的时候,关于加载本地图片的地方我搞了半天不行,后来求助chartGPT,还是很方便的。

mnist
mnist
mnist

未来AI工具肯定是越来越产品化,易使用。
但是,要想跟AI对话,需要对特定的领域有一定的理解。Prompt Engineer 也一定是趋势。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/399645.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux内核之内存管理知识以及伙伴系统

内存管理知识以及伙伴系统一、Linux 内核架构图二、虚拟内存地址空间布局2.1、用户空间2.2、内核空间2.3、硬件层面2.4、虚拟地址空间划分2.5、用户虚拟地址空间布局2.6、进程的进程描述和内存描述符关系2.7、内核地址空间布局三、SMP/NUMA 架构3.1、SMP3.2、NUMA四、伙伴系统及…

传输线的物理基础(四):传输线的特性阻抗

特性阻抗和控制阻抗对于一条均匀的线,无论我们选择看哪里,我们都会看到沿线传播时相同的瞬时阻抗。有一个表征传输线的瞬时阻抗,我们给它起了一个特殊的名字:特性阻抗。有一个瞬时阻抗是均匀传输线的特征。我们将这种恒定的瞬时阻…

RZ/G2L工业核心板U盘读写速率测试

1. 测试对象HD-G2L-IOT基于HD-G2L-CORE工业级核心板设计,双路千兆网口、双路CAN-bus、2路RS-232、2路RS-485、DSI、LCD、4G/5G、WiFi、CSI摄像头接口等,接口丰富,适用于工业现场应用需求,亦方便用户评估核心板及CPU的性能。HD-G2L…

idm如何下载种子文件和磁力链接 idm如何下载torrent

采用分段式下载技术并支持断点续传的idm下载加速器,几乎可以胜任所有的下载任务。由于该软件强大的下载能力和仅为10MB的小巧体积,idm被来自全球的用户亲切地称为天花板级的下载软件。那么有关idm如何下载种子文件和磁力链接,idm如何下载torr…

基于vivado(语言Verilog)的FPGA学习(1)——了解viviado面板和编译过程

基于vivado(语言Verilog)的FPGA学习(1)——了解程序面板和编译过程 每日废话:最近找实习略微一些焦虑,不想找软件开发,虽然有些C和python基础(之前上课学的),…

编码技巧——Redis Pipeline

本文介绍Redis pipeline相关的知识点及代码示例,包括Redis客户端-服务端的一次完整的网络请求、pipeline与client执行多命令的区别、pipeline与Redis"事务"、pipeline的使用代码示例; pipeline与client执行多命令的区别 Redis是一种基于客户…

如何挖掘专利创新点?

“无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。” 对于广大的软件工程师来说…

W806|CKLINK LITE|ICE调试|HardPoint|elf模板|CSDK|Debug|学习(4):CKLINK调试W806

目录 一、硬件连接 接线方式 错误提示 二、调试前准备 正常识别状态 wm_tool.exe缺失错误​ 三、flash配置 增加W806模板 compiler选项卡 Debug选项卡 ICE设置 正常连接信息 四、调试工程 添加硬断点 断点配置 仿真调试 下载固件 参考: 《手把手教…

《MySQL系列-InnoDB引擎28》表-约束详细介绍

约束 1 数据完整性 关系型数据库系统和文件系统的一个不同点是,关系数据库本身能保证存储数据的完整性,不需要应用程序的控制,而文件系统一般需要在程序端进行控制。当前几乎所有的关系型数据库都提供约束(constraint)机制,该机制…

群智能优化计算中的混沌映射

经实验证明,采用混沌映射产生随机数的适应度函数值有明显提高,用混沌映射取代常规的均匀分布的随机数发生器可以得到更好的结果,特别是搜索空间中有许多局部解时,更容易搜索到全局最优解,利用混沌序列进行种群初始化、…

基于Qt WebEngine 的Web仪器面板GUI程控技术

随着IIoT的发展,很多工业仪器也具备了远程管理的GUI。与早期使用串口进行命令交互不同,这些GUI可以直接在远程呈现数据。 作为希望对仪器、软件进行二次开发的小公司来说,会遇到GUI人工操作转自动化的需求。在无法通过串口等传统接口进行自动…

nextjs开发 + vercel 部署 ssr ssg

前言 最近想实践下ssr 就打算用nextjs 做一个人博客 , vercel 部署 提供免费域名,来学习实践下ssr ssg nextjs 一个轻量级的react服务端渲染框架 vercel 由 Next.js 的创建者制作 支持nextjs 部署 免费静态网站托管 初始化项目 npx create-next-app p…

【Linux】目录结构

Linux世界里,一切皆文件。 /bin:是Binary的缩写,这个目录存放着最经常使用的命令。(常用) /sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。 /home:存放普…

关于Pytorch中的张量学习

关于Pytorch中的张量学习 张量的概念和创建 张量的概念 Tensor是pytorch中非常重要且常见的数据结构,相较于numpy数组,Tensor能加载到GPU中,从而有效地利用GPU进行加速计算。但是普通的Tensor对于构建神经网络还远远不够,我们需…

实力加持!RestCloud完成多方国产化适配,携手共建信创生态

近年来,随着数字化建设进入深水区,企事业单位对信息安全重视程度与日俱增,核心技术自主可控已成为时代呼唤,国产化浪潮日益汹涌澎湃。近日,RestCloud在国产化方面取得新进展,完成了全部产品线信创环境的多方…

系统重装漏洞

zzcms系统重装漏洞 一、配置zzcms环境 1. 使用小皮搭建zzcms框架 2. 安装zzcms 按照下面的操作进行,傻瓜式操作即可 3. 打开网站 二、漏洞利用 在访问install目录的默认文件后,会出现zzcms安装向导 http://www.zzcms.com/install/index.php 但是会显示 “安装向导…

MQTT协议-发布消息(客户端向服务器发送)

MQTT协议-发布消息(客户端向服务器发送) 发布消息报文组成:https://blog.csdn.net/weixin_46251230/article/details/129414158 在分析完服务器下发到客户端的报文后,就可以参考JSON格式的有效载荷,将温湿度的值改为…

Linux发行版的backport

遇到一个问题,简要记录如下: base on ubuntu18.06 4.15内核,这版内核不支持一款intel的集成网卡,追踪内核代码的提交历史才发现,这款网卡是从linux-4.20才开始支持的,系统自带的这个Kernel版本不支持。 如果不允许升级内核,面对这种问题,社区的做法是把新内核的特性cher…

顺序表【数据结构】

文章目录:star2:1. 顺序表概念:star2:2. 框架3. 基本功能3.1 头文件:star:3.2 初始化:star:3.3 扩容:star:3.4 打印:star:3.5 尾插:star:3.6 头插:star:3.7 尾删:star:3.8 头删:star:3.9 指定插入:star:3.10 指定删除:star:3.11 查找:star2:3.12 注意事项4. 顺序表的缺点&#…

云原生安全2.X 进化论系列|云原生安全2.X未来展望(4)

随着云计算技术的蓬勃发展,传统上云实践中的应用升级缓慢、架构臃肿、无法快速迭代等“痛点”日益明显。能够有效解决这些“痛点”的云原生技术正蓬勃发展,成为赋能业务创新的重要推动力,并已经应用到企业核心业务。然而,云原生技…