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

news2024/11/24 8:16:07

参考
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.0

model = 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 keras

model = keras.models.load_model('C:/Users/DTW/AI/digitRecognize/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_matrix
        img_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.coloradmin.cn/o/2203257.html

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

相关文章

el-tree 修改每个层级的背景色

目录 一、思路 二、代码 1. HTML部分 2. js部分 3. css部分 案例图 一、思路 使用 render-content 插槽来自定义节点内容。根据节点的层级动态添加 CSS 类。写一个方法,用于:递归地获取节点的层级。如果节点没有父节点,则返回当前层级…

嵌入式工业显示器在食品生产行业的应用

嵌入式工业显示器在食品生产行业的应用主要体现在以下几个方面: 一、自动化控制与精准监测 嵌入式工业显示器通常与各类传感器和执行器集成,能够实时显示生产线的运行状态,实现自动化控制和精准监测。在食品生产过程中,从原材料…

Vscode+Pycharm+Vue.js+WEUI+django火锅(三)理解Vue

新创建的Vue项目里面很多文件,对于新手,老老实实做一下了解。 1.框架逻辑 框架的逻辑都是相通的,花点时间理一下就清晰了。 2.文件目录及文件 创建好的vue项目下,主要的文件和文件夹要先认识一下,并与框架逻辑对应起…

Centos7 搭建单机elasticsearch

以下是在 CentOS 7 上安装 Elasticsearch 7.17.7 的完整步骤:(数据默认保存在/var/lib/elasticsearch下,自行更改) 一、装 Java 环境 Elasticsearch 是用 Java 编写的,所以需要先安装 Java 运行环境。 检查系统中是…

springboot酒店客房管理系统-计算机毕业设计源码43070

目录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 删除信息流程 2.3 系统功能…

模拟堆算法

题目 代码 #include <bits/stdc.h> using namespace std; const int N 1e510; int heap[N], sz, cnt; int th[N], ht[N]; void hswap(int a, int b) {swap(heap[a], heap[b]);swap(ht[a], ht[b]);swap(th[ht[a]], th[ht[b]]); } void down(int h) {int t h;if(2*h <…

【开源项目】Jsoncpp的简单使用

Jsoncpp是一个开源项目&#xff0c;它是一个用于处理JSON&#xff08;JavaScript Object Notation&#xff09;数据的C库。它支持将C结构化的数据转化为JSON字符串&#xff0c;也支持将JSON字符串转化为结构化数据 JSON&#xff08;JavaScript Object Notation&#xff09;数据…

质量好的宠物空气净化器分享,希喂、小米、范罗士性能大揭秘

双十一大家都打算买什么&#xff1f;国庆小长假刚结束&#xff0c;没想到下周就开始预售付定金了。看了一圈自己没有什么想买的&#xff0c;就打算给我家毛孩子买点什么。之前一直很纠结要不要买宠物空气净化器&#xff0c;觉得有点贵迟迟没入手&#xff0c;去看了眼&#xff0…

直线导轨在自动化设备中需要注意什么?

直线导轨属于精密传动配件&#xff0c;因而在使用时要求有相当地慎重态度&#xff0c;如果使用不当&#xff0c;也不能达到预期的性能效果&#xff0c;尤其是保管和保养不当&#xff0c;很容易造成导轨失效等问题&#xff0c;导致无法正常使用。因此&#xff0c;自动化设备中使…

UI设计岗前训练

UI设计&#xff0c;全称User Interface Design&#xff0c;即用户界面设计&#xff0c;是指对软件或应用程序的人机交互、操作逻辑、界面美观的整体设计。它涉及软件的操作流程、逻辑、布局、色彩、字体、图标、按钮、动画效果等多个方面&#xff0c;旨在提升用户体验和满意度。…

又被Transformer秀到了!结合小样本学习发A会!

在有限的数据资源下&#xff0c;为了训练出高性能的机器学习模型&#xff0c;我们常会考虑Transformer小样本学习。 这是因为Transformer能从有限的数据中提取更多有用的信息&#xff0c;这样与小样本学习结合&#xff0c;可以更有效的帮助我们提高模型的性能&#xff0c;加速…

C9800的Flex配置

C9800的配置和AireOS WLC的配置架构有了很大的调整&#xff0c;在配置一个WLAN的时候&#xff0c;可能相对麻烦一些&#xff0c;但是架构还是比较清晰。 这里记录一下针对Flex的配置&#xff0c;主要分为如下几个摘要&#xff08;以及对应的CLI配置&#xff09;&#xff1a; 1…

python+request+unittest+ddt自动化框架

参考资料&#xff1a; 用户中心 - 博客园 抓包模拟器笔记 肖sir__接口自动化pythonrequestddt&#xff08;模版&#xff09; - xiaolehua - 博客园 pythonrequestunittestddt自动化框架 博文阅读密码验证 - 博客园 肖sir__python之模块configparser - xiaolehua - 博客园 c…

4G路由网关R10在智能制造生产线的应用

在当今智能制造的时代&#xff0c;高效稳定的网络连接和数据传输至关重要。4G 路由网关 R10 以其卓越的性能&#xff0c;在智能制造生产线中发挥着重要作用。 4G 路由网关 R10 是一款功能强大的网络设备。它支持多种网络连接方式&#xff0c;包括 4G 网络、有线网络等&#xff…

骨传导耳机哪个牌子好?五大高热度骨传导耳机测评推荐

随着科技的不断进步&#xff0c;耳机已经成为了我们日常生活中不可或缺的一部分。从传统的有线耳机到无线蓝牙耳机&#xff0c;再到现在的骨传导耳机&#xff0c;每一次技术的革新都给用户带来了全新的体验。骨传导耳机&#xff0c;作为一种新兴的耳机类型&#xff0c;它通过颅…

乐歌E5,E6系列升降桌质量如何?2024推荐必买的四款热销型号

在数字化时代&#xff0c;电脑桌成为了我们日常生活和工作中不可或缺的一部分。然而&#xff0c;长时间坐在固定高度的电脑桌前&#xff0c;不仅会影响我们的工作效率&#xff0c;还可能对身体健康造成不良影响。因此&#xff0c;一款能够电动升降的电脑桌显得尤为重要。 乐歌…

Linux-创建函数

基本的脚本函数 返回值 在函数中使用变量 数组变量和函数-向函数传递数组参数 数组变量和函数-从函数返回数组 函数递归 创建库 在命令行上使用函数-在命令行上创建函数 在命令行上使用函数-在.bashrc文件中定义函数

计算机组成的抽象以及相关技术

第1章 计算机抽象以及相关技术 最高端的服务器是超级计算机&#xff1a;几十万个处理器和太字节(terabyte)2的40次方的内存TB&#xff0c;成本数千万或数亿。通常写为1000000000000&#xff0c;万亿。 云计算接替了传统服务器称为仓储级计算机中心&#xff0c;可以实现Saas(软…

vue3的知识整理

1. vue3的生命周期 vue3的生命周期一般有2种形式写法&#xff0c;一种是基于vue2的options API的写法&#xff0c;一种是vue3特有的Composition API options API的生命周期 基本同vue2的生命周期基础&#xff0c;只是为了与生命周期beforeCreate和created对应&#xff0c;将bef…

餐企中场战事:高端网红退败,平价品牌向前

餐饮行业&#xff0c;风起云涌。人人都在讨论逆流与寒气的今天&#xff0c;品牌何以为战&#xff1f;步入平价时代&#xff0c;又该如何寻找制胜法宝&#xff1f; 01风浪越大&#xff0c;餐饮机会越多 如果把餐饮业的历史无限拉长&#xff0c;你会发现每个看似经济下行的节点…