用模型预测测试数据


Hi, I’m Shendi




2、用模型预测测试数据



在之前已经训练好了一个模型,可以通过 model.save("path") 来保存模型到硬盘,下次直接使用。


这个模型使用的 mnist 数据集训练,这个数据集包含6万训练样本和一万测试样本,28*28像素,是一个手写数字数据集,相当于在学习编程语言的hello,world

接下来就开始使用训练好的模型


使用测试数据测试

最开始我尝试直接用画图工具绘制一个数组,让其识别。但识别出来的压根不对,也不清楚什么原因,所以从最开始的弄起。

既然训练的模型评估的准确度达到90%多,那么使用测试数据就没有问题了吧,我将测试数据的图片保存依然识别不对。于是直接使用加载的测试数据


最开始,当然是加载数据集

# 加载 mnist 数据集
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()

通过 tf.keras.models.load_model 加载保存的模型,我存储在 my_model 文件夹中

model = tf.keras.models.load_model('my_model')

# 选择一些测试集样本
selected_samples = x_test[:5]
true_labels = y_test[:5]

其中x_test是样本数据,y_test样本的正确标签

通过 predict 进行预测,在之前训练的模型有十个输出层,0-9,预测获得的结果就是这个样本对应输出层的可信度,最终结果选择可信度最高的那个

predictions = model.predict(selected_samples)
print(predictions)
# 选取可信度最高的打印
print(tf.argmax(predictions[0]).numpy())

因为我使用vscode,所以没办法直接show,只能保存到本地文件夹查看结果,于是使用以下代码

# 保存图像和预测结果到文件
for i in range(len(selected_samples)):
    plt.imshow(selected_samples[i], cmap='gray')  # 显示灰度图像
    plt.title(f"Predicted: {tf.argmax(predictions[i]).numpy()}, True: {true_labels[i]}")
    plt.axis('off')
    plt.savefig(f"predicted_image_{i}.png")  # 保存图像
    plt.close()

这个结果是准确的,效果如下

在这里插入图片描述


其中上面的predicted是预测结果,true是正确结果



问题

就如上面所说,我将数据集的测试数据的某张图片保存到本地,然后加载,用模型预测加载的图片,是不准确的。

我的代码

import tensorflow as tf
import matplotlib.pyplot as plt

from PIL import Image
import numpy as np

# 加载 mnist 数据集
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()

def initModel():
    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)
    ])

    predictions = model(x_train[:1]).numpy()
    tf.nn.softmax(predictions).numpy()

    loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
    loss_fn(y_train[:1], predictions).numpy()

    model.compile(optimizer='adam',
                loss=loss_fn,
                metrics=['accuracy'])

    model.fit(x_train, y_train, epochs=5)

    r = model.evaluate(x_test,  y_test, verbose=2)
    print(r)

    model.save("my_model");

    # probability_model = tf.keras.Sequential([
    #   model,
    #   tf.keras.layers.Softmax()
    # ])
    # probability_model(x_test[:5])
# initModel();

def test():
    model = tf.keras.models.load_model('my_model')
    # 选择一些测试集样本
    selected_samples = x_test[:5]
    true_labels = y_test[:5]

    # 使用模型对样本进行预测
    predictions = model.predict(selected_samples)
    print(predictions)
    print(tf.argmax(predictions[0]).numpy())

    # 保存图像和预测结果到文件
    for i in range(len(selected_samples)):
        plt.imshow(selected_samples[i], cmap='gray')  # 显示灰度图像
        plt.title(f"Predicted: {tf.argmax(predictions[i]).numpy()}, True: {true_labels[i]}")
        plt.axis('off')
        plt.savefig(f"predicted_image_{i}.png")  # 保存图像
        plt.close()
# test();

def test2():
    model = tf.keras.models.load_model('my_model')
    
    # 准备图像
    img_path = 'test_img.png'  # 替换为你的图像文件路径
    image = Image.open(img_path)
    image = image.convert('L')  # 转换为灰度图像
    image = image.resize((28, 28))  # 调整图像大小
    image = np.array(image)  # 转换为 numpy 数组

    # 归一化处理(如果在训练模型时有进行归一化)
    image = image.astype('float32') / 255

    plt.imshow(image, cmap='gray')  # 显示灰度图像
    plt.axis('off')
    plt.savefig(f"my.png")  # 保存图像
    plt.close()

    # 对图像进行预测
    prediction = model.predict(np.expand_dims(image, axis=0))
    print(prediction)
    print(np.argmax(prediction, axis=1))
test2()

def saveImg(index):
    img = Image.fromarray(x_test[index])
    img.save('test_img.png')
saveImg(0)

我直接使用画图工具绘制数字,加载这个图片,预测,也是不准确的。对于这个,已经花了大把的时间搜索,但资料都特别少,于是准备跳过了,毕竟刚开始,一切都是未知。不应在一些非目标的事情浪费大把时间。




END

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

12 Vue3中使用v-if指令实现条件渲染

概述 v-if指令主要用来实现条件渲染,在实际项目中使用得也非常多。 v-if通常会配合v-else-if、v-else指令一起使用,可以达到多个条件执行一个,两个条件执行一个,满足一个条件执行等多种场景。 下面,我们分别演示这三…

SAP ABAP SCREEN日期字段添加搜索帮助

文章目录 前言 前言 有时我们在自定义屏幕中添加了日期的输入框没有带出F4搜索帮助,如下设置 为字段手动添加一个搜索帮助BU_DATE_CHAR

mybatis-plus-枚举处理

properties文件的配置 //加载处理枚举类型处理的包路径 mybatis-plus.typeEnumsPackagecom.common.base.enums.** yaml配置文件的配置 # MP 配置 mybatis-plus: # type-enums-package: com.baomidou.mybatisplus.samples.enums.enumsconfiguration:# 3.0.8之前版本问题默认将…

DC-磁盘管理

2023年全国网络系统管理赛项真题 模块B-Windows解析 题目 在DC2上安装及配置软RAID 5。在安装好的DC2虚拟机中添加三块10G虚拟磁盘。组成RAID 5,磁盘分区命名为卷标H盘:Raid5。手动测试破坏一块磁盘,做RAID磁盘修复,确认RAID 5配置完毕。配置步骤 关闭虚拟机,添加3块10G磁…

java web中日期Date类型在页面中格式化显示的三种方式

一般我们经常需要在将服务器端的Date类型,传到页面进行显示,这就涉及到一个如何格式化显示Date类型的问题,一般我们有三种方式进行: 1)在服务端使用SimpleDateFormat等类格式化成字符串,然后传给客户端&am…

全新Facebook养号指南,怎么做才能不被封号?

最近听很多跨境电商小伙伴们说 Facebook 又被封号了,可能是你的 Facebook 账号还不够稳定,或者说还没有足够的粉丝和互动。如果你想让自己的 Facebook 账号更加稳定,就需要养号。俗话说,一封回到解放前,为什么你明明有…

leetcode 974. 和可被 K 整除的子数组(优质解法)

代码&#xff1a; class Solution {public int subarraysDivByK(int[] nums, int k) {HashMap<Integer,Integer> hashMapnew HashMap();hashMap.put(0,1);int count0; //记录子数组的个数int last0; //前一个下标的前缀和int now0; //当前下标的前缀和for(int i0;…

基于Java (spring-boot)的课程管理系统

一、项目介绍 ​近年来&#xff0c;随着网络学校规模的逐渐增大&#xff0c;人工书写数据已经不能够处理如此庞大的数据。为了更好的适应信息时代的高效性&#xff0c;一个利用计算机来实现学生信息管理工作的系统将必然诞生。基于这一点&#xff0c;设计了一个学生信息管理系统…

【Linux驱动】pinctrl 和 gpio子系统(一)—— pinctrl 节点解析,引入gpio子系统

裸机开发时&#xff0c;如果要点亮一个 LED&#xff0c;我们要做如下内容&#xff1a; 初始化时钟设置引脚复用为哪个功能&#xff0c;配置引脚的电气属性设置引脚的 IO 方向、初始值 有了设备树以后&#xff0c;我们可以通过 pinctrl 和 gpio 子系统来配置上述内容。 pinct…

C++——C++11(2)

我在我的C异常博客中曾提到&#xff0c;对于异常的处理经常会导致内存泄漏问题&#xff0c; 一种解决方法是异常的重新抛出&#xff0c;还有一种就是RAII&#xff0c;那么RAII的思想体现 在C中就是智能指针&#xff0c;所以接下来我将简单的介绍&#xff0c;什么是RAII&#xf…

Day67力扣打卡

打卡记录 美丽塔 II&#xff08;前缀和 单调栈&#xff09; 链接 class Solution:def maximumSumOfHeights(self, maxHeights: List[int]) -> int:n len(maxHeights)stack collections.deque()pre, suf [0] * n, [0] * nfor i in range(n):while stack and maxHeights…

【Date对象】js中的日期类型Date对象的使用详情

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;JavaScript小贴士 &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要的是继续…

LeetCode 热题100——单调栈

​ 个人主页&#xff1a;日刷百题 系列专栏&#xff1a;〖C语言小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 &#x1f30e;欢迎各位→点赞&#x1f44d;收藏⭐️留言&#x1f4dd; ​ ​ 写在前面&#xff1a; 递增单调栈&#xff1a;栈中元素从栈底到栈顶依次增大 递减单调栈…

7-1 单身狗(PTA - 数据结构)

由于这道题在留的作业中&#xff0c;排序和查找都有&#xff0c;所以我先写这道题&#xff08;图的先放放&#xff09; “单身狗”是中文对于单身人士的一种爱称。本题请你从上万人的大型派对中找出落单的客人&#xff0c;以便给予特殊关爱。 输入格式&#xff1a; 输入第一行…

Linux笔记---文件查看和编辑

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux学习 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 命令 cat (Concatenate and Display): more 和 less: nano 和 vim (文本编辑器): 结语 我的其他博客 前言 学习Linux命令行和文件…

C++实现位图

目录 一、什么是位图 二、位图类 1.参数及构造函数 2.set函数设置为1&#xff08;代表存在&#xff09; 3.reset函数设置为0&#xff08;代表不存在&#xff09; 4.test函数查看状态&#xff08;0还是1&#xff09; 三、位图的变形 一、什么是位图 位图这个词汇比较少见…

im6ull学习归纳总结(一)APP——04_文件IO

4.1文件从何而来 如图所示文件可以是 1真实文件保存在设备上 2内核提供的虚拟文件 3设备节点 4.2文件的访问方式 4.2.1通用IO模型&#xff1a;open/read/write/lseek/close 实验1 copy文件 代码 #include <sys/types.h> #include <sys/stat.h> #include <fc…

10 个顶级免费 Android 数据恢复软件可帮助恢复已删除的文件

不小心删除了手机上的一些重要数据或文件&#xff1f;这很不幸&#xff0c;但不要悲伤或放弃希望&#xff0c;因为仍有机会恢复它们。 10 个顶级免费 Android 数据恢复软件 虽然 Android 手机没有像 Windows 那样的回收站可以自动存储您删除的数据&#xff0c;但是有很多功能强…

大模型时代下的因果推断

导读&#xff1a;在数字化建设不断推进的今天&#xff0c;随着技术的不断发展&#xff0c;从统计学、机器学习、深度学习&#xff0c;再到因果学习&#xff0c;以及最新的热门大模型方向&#xff0c;九章云极DataCanvas始终紧贴最前沿的、最能助力企业和落地实践的方向&#xf…

合伙企业的优缺点是什么

合伙企业的优缺点是什么 一、合伙企业的优点 合伙企业在资本扩张方面较个人独资企业更有优势。个人独资企业仅有一个投资人&#xff0c;尽管存在整个家庭财产成为个人独资企业资本来源的情形&#xff0c;但该类企业资本规模相对较小、抗风险能力较弱。为扩张资本&#xff0c;单…