tensorflow入门案例手写数字识别人工智能界的helloworld项目落地1

参考
https://tensorflow.google.cn/?hl=zh-cn
https://tensorflow.google.cn/tutorials/keras/classification?hl=zh-cn
项目资源
https://download.csdn.net/download/AnalogElectronic/89872174

文章目录

  • 一、案例学习
    • 1、导入测试和训练数据集,定义模型,编译模型,模型训练,模型评估
    • 2、模型经过训练后,您可以使用它对一些图像进行预测。附加一个 Softmax 层,将模型的线性输出 logits 转换成更容易理解的概率。
    • 3、绘图显示某一张测试图片
    • 4、Windows上画图工具手写数字图片保存到本地文件夹,像素也是28*28
    • 5、使用模型预测手写图片
  • 二、项目落地
    • 1、在IDEA工具Pycharm中运行如下代码
    • 2、运行日志如下
    • 3、使用postman调用接口

一、案例学习

1、导入测试和训练数据集,定义模型,编译模型,模型训练,模型评估

数据集市28*28单通道灰度图像

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
mnist = tf.keras.datasets.mnist(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0model = tf.keras.models.Sequential([tf.keras.layers.Flatten(input_shape=(28, 28)),tf.keras.layers.Dense(128, activation='relu'),tf.keras.layers.Dropout(0.2),tf.keras.layers.Dense(10, activation='softmax')
])model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)

在这里插入图片描述

2、模型经过训练后,您可以使用它对一些图像进行预测。附加一个 Softmax 层,将模型的线性输出 logits 转换成更容易理解的概率。

probability_model = tf.keras.Sequential([model,tf.keras.layers.Softmax()
])#保存模型
probability_model.save('./mnist.model.keras')#测试前五张图片的测试概率
probability_model(x_test[:5])

预测结果是一个包含 10 个数字的数组。它们代表模型对 10 种不同服装中每种服装的“置信度”。您可以看到哪个标签的置信度值最大:
在这里插入图片描述

3、绘图显示某一张测试图片

import numpy as np
import matplotlib.pyplot as plt
plt.figure()
plt.imshow(x_test[1])
plt.colorbar()
plt.grid(False)
plt.show()

在这里插入图片描述

4、Windows上画图工具手写数字图片保存到本地文件夹,像素也是28*28

在这里插入图片描述

5、使用模型预测手写图片

from tensorflow.keras.preprocessing.image import img_to_array, load_img
img_path = './img/7.png'
img = load_img(img_path, target_size=(28, 28), color_mode='grayscale')
img = img_to_array(img) # 灰度化
img = img.reshape(1,28,28)
img = 255-img
predictions  = probability_model(img)
np.argmax(predictions[0])

在这里插入图片描述

测试多次屡试不爽都是对应数字

二、项目落地

使用python搭建一个web项目,项目中加载保存的模型,预测用户上传的图片,通过接口上传图片返回图片对应的数字

1、在IDEA工具Pycharm中运行如下代码

from flask import Flask, request
from PIL import Image
import numpy as np
from werkzeug.utils import secure_filename
from tensorflow import kerasmodel = keras.models.load_model('./mnist.model.keras')app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = './path/to/the/uploads'  # 替换为你的上传文件夹路径@app.route('/')
def hello_world():return '欢迎来到我的Python Web程序!'@app.route('/upload', methods=['POST'])
def upload_image():if 'file' not in request.files:return 'No file part'file = request.files['file']if file.filename == '':return 'No selected file'if file:  # 这里可以加文件类型判断逻辑filename = secure_filename(file.filename)# file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))img = Image.open(file.stream)channels = len(img.getbands())print('图像通道数为', channels)img = img.convert("L")  # 转换为灰度# img = img.convert("RGB")  # 转换为3通道img_matrix = np.asarray(img)img_matrix = 255 - img_matriximg_matrix = img_matrix.reshape(1, 28, 28)predictions = model.predict(img_matrix)result = np.argmax(predictions[0])return 'File uploaded successfully filename='+filename + 'predict result='+str(result)if __name__ == '__main__':app.run(debug=True)

2、运行日志如下

2024-10-10 18:45:12.611150: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
2024-10-10 18:45:13.735215: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
2024-10-10 18:45:16.360099: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.* Serving Flask app 'webtest01'* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.* Running on http://127.0.0.1:5000
Press CTRL+C to quit* Restarting with stat
2024-10-10 18:45:17.159241: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
2024-10-10 18:45:18.305527: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
2024-10-10 18:45:21.072051: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.* Debugger is active!* Debugger PIN: 459-068-596
图像通道数为 4
127.0.0.1 - - [10/Oct/2024 18:45:21] "POST /upload HTTP/1.1" 200 -
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 57ms/step

3、使用postman调用接口

在这里插入图片描述
在这里插入图片描述
后话,发现一个现象,如果绘图手写数字不在正中间占满图片,而是偏离正中间,或者写的特别小就识别不出来了

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unreal5从入门到精通之 如何使用事件分发器EventDispather

文章目录 前言1.创建事件分发器设置属性2.创建Bind、Unbind及Unbind All节点在蓝图类中创建在关卡蓝图中创建3.创建事件分发器事件节点4.调用事件分发器在蓝图类中进行调用在关卡蓝图中进行调用前言 事件分发器是 Unreal Engine(UE)中一个重要的概念,它负责在游戏运行时管理…

超GPT3.5性能,无限长文本,超强RAG三件套,MiniCPM3-4B模型分享

MiniCPM3-4B是由面壁智能与清华大学自然语言处理实验室合作开发的一款高性能端侧AI模型,它是MiniCPM系列的第三代产品,具有4亿参数量。 MiniCPM3-4B模型在性能上超过了Phi-3.5-mini-Instruct和GPT-3.5-Turbo-0125,并且与多款70亿至90亿参数的…

基于socket实现客户端与服务器之间TCP通信

我们在算法部署时,通常需要进行算法端与其他服务端的通信,要么接受指令、要么是需要上传算法结果;除了我们常用的gRPC、HTTP、MQ等方式,还可以利用TCP来实现可靠通信;本次我们利用socket来展示如何进行两端的TCP通信。…

SAP SD学习笔记10 - SD出荷传票1 在库转送Order - 补充出荷 详解

上一章学习了受注传票中的不完全Log和Business Partner(取引先机能)的知识。 SAP SD学习笔记09 - 受注传票中的不完全Log 和 Business Partner(取引先机能)-CSDN博客 本章继续学习SD的内容。 - 在库转送Order - 补充出荷 目录 1&#xff0…

HCIP-HarmonyOS Application Developer 习题(九)

(多选) 1、HarmonyOS多窗口交互能力提供了以下哪几种交互方式? A. 全局消息通知 B.平行视界 C.悬浮窗 D.分屏 答案:BCD 分析:系统提供了悬浮窗、分屏、平行视界三种多窗口交互,为用户在大屏幕设备上的多任务并行、便捷的临时任务…

集合框架07:LinkedList使用

1.视频链接:13.14 LinkedList使用_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1zD4y1Q7Fw?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p142.LinkedList集合的增删改查操作 package com.yundait.Demo01;im…

CSS @规则(At-rules)系列详解___@charset规则使用方法

CSS 规则(At-rules)系列详解 ___charset规则使用方法 本篇目录: 零、时光宝盒 一、charset规则定义和用法 二、CSS charset语法 三、charset 使用方法例子 1、正确使用方法 2、无效的,错误的使用方法 零、时光宝盒 (https://blog.csd…

Android ViewModel

一问:ViewModel如何保证应用配置变化后能够自动继续存在,其原理是什么,ViewModel的生命周期和谁绑定的? ViewModel 的确能够在应用配置发生变化(例如屏幕旋转)后继续存在,这得益于 Android 系统的 ViewMod…

快速解决urllib3.exceptions.MaxRetryError: HTTPSConnectionPool

正题 使用pip命令查看urllib3版本 pip list发现版本为 1.26.9 urllib3 v1.26.9此时如下报错,无法正常使用(使用了代理) urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(hostxxx.xxxxx.com, port443): Max retries exceeded wit…

神经网络模型的“扩散与进化”思想启迪

在上一篇笔记「上交大全华班复现o1旅程式学习下的深思考」中,其中对于上交大提出的旅程学习即system2慢思考认知范式下对于“多步骤的隐式到显式空间状态映射下的细粒度联合概率分布建模”的描述隐喻为“社会心理学或社会经济学两种不同的长程动态系统慢演化现象”。…

AI+视频监控:EasyCVR安防平台赋能火电制造行业的视频智能管理方案

随着信息技术的飞速发展和智能制造的深入推进,火电制造行业作为国民经济的重要组成部分,正面临着智能化转型的迫切需求。为了提升生产效率、保障设备安全、优化管理流程,火电制造企业迫切需要引入先进的视频监控与人工智能技术。EasyCVR安防监…

如何获取 uni-app 应用发布所需的证书、私钥与配置文件

引言 在开发和发布iOS应用时,开发者常常会面临一系列复杂的证书、私钥密码以及配置文件的管理问题。这些配置不仅影响到应用的开发调试,还决定了应用是否能够顺利通过审核并发布到App Store。对于使用uni-app进行开发的开发者来说,自动生成的…

c++基础知识复习(1)

前期知识准备 1 构造函数 (1)默认构造函数:没有参数传入,也没有在类里面声明 (2)手动定义默认构造函数:没有参数传入,但是在类里面进行了声明 可以在类外实现或者类内实现 以下案…

【最新华为OD机试E卷-支持在线评测】考勤信息(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…

vue3 高德地图标注(飞线,呼吸点)效果

装下这两个 npm 忘了具体命令了&#xff0c;百度一下就行 “loca”: “^1.0.1”, “amap/amap-jsapi-loader”: “^1.0.1”, <template><div id"map" style"width: 100%;height: 100%;"></div> </template><script setup> …

自然语言处理问答系统:技术进展、应用与挑战

自然语言处理&#xff08;NLP&#xff09;问答系统是人工智能领域的一个重要分支&#xff0c;它通过理解和分析用户的提问&#xff0c;从大量的文本数据中提取相关信息&#xff0c;并以自然语言的形式回答用户的问题。随着深度学习技术的发展&#xff0c;尤其是预训练语言模型&…

【unity框架开发12】从零手搓unity存档存储数据持久化系统,实现对存档的创建,获取,保存,加载,删除,缓存,加密,支持多存档

文章目录 前言一、Unity对Json数据的操作方法一、JsonUtility方法二、Newtonsoft 二、持久化的数据路径三、数据加密/解密加密方法解密方法 四、条件编译指令限制仅在编辑器模式下进行加密/解密四、数据持久化管理器1、存档工具类2、一个存档数据3、存档系统数据类4、数据存档存…

访问控制列表(课内实验)

实验2&#xff1a;访问控制列表 实验目的及要求&#xff1a; 通过实验&#xff0c;进一步的理解标准ACL与扩展ACL的工作原理及执行过程。理解通配符的概念&#xff0c;熟练掌握标准ACL与扩展ACL的配置指令&#xff0c;掌握将访问控制列表应用VTY线路上&#xff0c;并且能够判断…

【基于ARM深入分析C程序】1--ARM架构与汇编、分析C语句`a++`的执行过程

【基于ARM深入分析C程序】1–ARM架构与汇编、分析C语句a的执行过程 文章目录 【基于ARM深入分析C程序】1--ARM架构与汇编、分析C语句a的执行过程一、3个操作指令二、CPU是怎么知道执行这三条操作指令的&#xff1f;2.1 CPU的架构 2.2 寄存器 本文作为学习笔记&#xff0c;围绕的…

【Next.js 入门教程系列】09-优化技巧

原文链接 CSDN 的排版/样式可能有问题&#xff0c;去我的博客查看原文系列吧&#xff0c;觉得有用的话&#xff0c; 给我的库点个star&#xff0c;关注一下吧 上一篇【Next.js 入门教程系列】08-发送邮件 优化技巧 本篇包括以下内容: Optimizing imagesUsing third-party JS…