目标检测入门体验,技术选型,加载数据集、构建机器学习模型、训练并评估

news2025/2/3 21:04:11

Hi, I’m Shendi




1、目标检测入门体验,技术选型,加载数据集、构建机器学习模型、训练并评估



在最近有了个物体识别的需求,于是开始学习

在一番比较与询问后,最终选择 TensorFlow。

对于编程语言,我比较偏向Java或nodejs的,而TensorFlow这两者都是支持的,但是我看了下Java的API,标记了一个D…弃用的标识,而nodejs经过询问说不定有些功能可能没有,语言只是工具,所以最终还是选择了首选的Python


前置准备

因为使用python,在开始前,需要安装Python与pip

可以参考这篇文章 Python+pip下载与安装 https://sdpro.top/blog/html/article/1207.html

需要注意的是,对Python版本是有要求的,我因为版本过高无法安装TensorFlow,可以在下面链接查看版本要求

https://tensorflow.google.cn/install/pip?hl=zh-cn#system-install

在这里插入图片描述


否则会出现下面这样的问题:

在这里插入图片描述


这是 TensorFlow 官网:https://www.tensorflow.org/

官网的初学者快速入门教程:https://www.tensorflow.org/tutorials/quickstart/beginner



使用 pip 安装 TensorFlow

使用以下命令安装

pip3 install tensorflow

我使用了阿里云的镜像,需要增加额外参数信任此地址才能继续

在这里插入图片描述


等待下载完成就可以直接使用了


入门

这里通过官网的初学者 TensorFlow 2.0教程入门

初学者的 TensorFlow 2.0 教程


对于啥也不懂的我来说确实有点难以…

主要是其中的代码,讲述的大概不够清晰,不知道结果是什么样。通过查阅资料以及询问 GPT,总算是ok了


就分那么几步

第一步,导入 TensorFlow

import tensorflow as tf

第二步,加载数据集

关于这个数据集,我是懵逼的,官网就三行代码,也没有什么描述,但是有个链接,点进去,全英文

标题翻译过来是这样的:MNIST数据库的手写数字

根据询问gpt,的确是这样的

官方的描述与代码:

加载并准备 MNIST 数据集。将样本数据从整数转换为浮点数:

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

这样不知道数据集到底是什么,所以我通过询问GPT,得知了显示数据集的方法,直接显示报错,所以保存成图片的方式来显示

需要安装 matplotlib 库

pip install matplotlib

然后在代码导入

import matplotlib.pyplot as plt

在加载完数据集后插入这样的代码,将数据集的几张图片保存

# 可视化前几个训练集样本的图像并保存为文件
for i in range(5):  # 查看前五个样本
    print("标签:", y_train[i])
    plt.imshow(x_train[i], cmap='gray')
    plt.savefig(f'image_{i}.png')  # 将图像保存为文件
    plt.close()  # 关闭当前图像,准备绘制下一张图像

运行后,可以在当前文件的上级文件夹看到对应的图片了,是手写数字图

在这里插入图片描述


第三步,构建机器学习模型

这里直接复制官网的代码据可以了,毕竟刚学,重要的是体验

通过堆叠层来构建 tf.keras.Sequential 模型。

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)
])

对于每个样本,模型都会返回一个包含 logits 或 log-odds 分数的向量,每个类一个。

在深度学习的分类问题中,模型通常最后一层输出的是一个包含每个类别得分的向量,这些得分被称为 logits 或 log-odds 分数。Logits 不是直接的概率值,它们表示模型对每个类别的置信程度或分数。

举例来说,如果你的模型对手写数字进行分类,输出层可能会生成一个包含 10 个元素的向量,对应着数字 0 到 9。这个向量中的每个元素都代表了模型认为图像属于对应数字的得分,比如对于数字 3 的 logits 可能是 6.2,对于数字 7 可能是 3.1,而对于数字 1 可能是 1.5 等等。


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

上面可以使用 print 将 predictions 打印查看,是一个数组

这行代码是在使用训练好的模型对输入数据进行预测,其中 x_train[:1] 表示取训练集中的第一个样本(在 TensorFlow 中,通常使用的索引是从 0 开始的)。

model(x_train[:1]) 这部分代码是将训练好的模型应用在第一个训练样本上,得到模型的预测结果。预测结果是一个包含每个类别的 logits(或 log-odds 分数)的向量。

通过 .numpy() 方法,将 TensorFlow 的张量对象转换为 NumPy 数组,以便查看预测结果。

这个操作对于初步了解模型在单个样本上的预测结果非常有用。这样可以看到模型对于这个特定样本的预测结果,了解模型的输出结构以及 logits 的分布情况。


tf.nn.softmax 函数将这些 logits 转换为每个类的概率

tf.nn.softmax(predictions).numpy()

这行代码使用了 TensorFlow 中的 tf.nn.softmax() 函数对模型的预测结果 predictions 进行 softmax 处理,将其转换为概率分布。

具体来说,tf.nn.softmax(predictions) 将 logits(或 log-odds 分数)转换为对应的概率分布,这些概率表示模型对每个类别的预测概率。

通过 .numpy() 方法将 TensorFlow 的张量对象转换为 NumPy 数组,以便查看预测结果。这样处理后,你将得到每个类别的概率分布,可以看到模型对于这个特定样本,每个类别的预测概率值。


使用 losses.SparseCategoricalCrossentropy 为训练定义损失函数,它会接受 logits 向量和 True 索引,并为每个样本返回一个标量损失。

loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)

此损失等于 true 类的负对数概率:如果模型确定类正确,则损失为零。

这个未经训练的模型给出的概率接近随机(每个类为 1/10),因此初始损失应该接近 -tf.math.log(1/10) ~= 2.3

loss_fn(y_train[:1], predictions).numpy()

可以通过 print 打印上面的执行结果


在开始训练之前,使用 Keras Model.compile 配置和编译模型。将 optimizer 类设置为 adam,将 loss 设置为您之前定义的 loss_fn 函数,并通过将 metrics 参数设置为 accuracy 来指定要为模型评估的指标。

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

第四步,训练并评估模型

使用 Model.fit 方法调整您的模型参数并最小化损失

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

Model.evaluate 方法通常在 “Validation-set” 或 “Test-set” 上检查模型性能。

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

可以将上面的结果通过 print 打印,是一个数组,有两个值

在这里插入图片描述

  1. 第一个值 0.0753958597779274 是模型在测试集上的损失值。这个值表示模型在测试数据集上的平均损失程度,即模型在预测过程中与真实标签的差异程度。
  2. 第二个值 0.9778000116348267 是模型在测试集上的准确率(或其他指定的评估指标)。在分类问题中,通常使用准确率来衡量模型的性能,它表示模型在测试集上正确预测的样本比例。

这两个值分别展示了模型在测试数据集上的损失程度和整体性能。较低的损失值和较高的准确率通常意味着模型在这个测试数据集上表现良好。


如果您想让模型返回概率,可以封装经过训练的模型,并将 softmax 附加到该模型:

probability_model = tf.keras.Sequential([
  model,
  tf.keras.layers.Softmax()
])

probability_model(x_test[:5])

到这里就算是体验了下吧,下节将这个模型尝试使用,看看能不能识别出数字


结论

恭喜!您已经利用 Keras API 借助预构建数据集训练了一个机器学习模型。

有关使用 Keras 的更多示例,请查阅教程。要详细了解如何使用 Keras 构建模型,请阅读指南。如果您想详细了解如何加载和准备数据,请参阅有关图像数据加载或 CSV 数据加载的教程。




END

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

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

相关文章

vue关闭当前路由页面并跳转到其父页面

1.dom中添加关闭或取消按钮 <el-button type"primary" class"blueLinearbg cancelBtn" click"cancel" >取 消</el-button>2.cancel方法中 /*取消或关闭*/cancel(){this.$store.dispatch("tagsView/delView", this.$route)…

state的保留与重置

让组件状态保留的情况&#xff1a; 让组件状态重置的3种情况&#xff1a;

[NISACTF 2022]easyssrf

[NISACTF 2022]easyssrf wp ssrf 的题目&#xff0c;提示了会使用 curl 连接输入的网站并返回响应包。 测试连接百度 直接在输入框中写 www.baidu.com 是无法连接的&#xff0c;需要在前面加入 http 或者 https &#xff0c;因为 curl 的使用方式就是&#xff1a; curl htt…

从0到1部署gitlab自动打包部署项目

本文重点在于配置ci/cd打包 使用的是docker desktop 第一步安装docker desktop Docker简介 Docker 就像一个盒子&#xff0c;里面可以装很多物件&#xff0c;如果需要某些物件&#xff0c;可以直接将该盒子拿走&#xff0c;而不需要从该盒子中一件一件的取。Docker中文社区、…

Ubuntu 常用命令之 man 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 man命令在Ubuntu系统中是一个非常重要的命令&#xff0c;它用于查看系统的手册页。手册页是Linux和Unix系统中的一种在线文档&#xff0c;用于描述系统中的命令、函数、配置文件等的详细信息。 man命令的基本格式是 man [选项] …

光伏企业如何能够提高光伏电站的建设效率?

随着全球对可再生能源需求的日益增长&#xff0c;光伏行业的发展势头强劲。然而&#xff0c;光伏电站建设过程中往往存在效率低下的问题&#xff0c;这不仅影响了电站的运营成本&#xff0c;也制约了整个行业的发展速度。因此&#xff0c;如何提高光伏电站的建设效率&#xff0…

DshanMCU-R128s2 Hello World!

本文将介绍使用 R128 开发板从串口输出 Hello World 的方式介绍 SDK 软件开发流程。 载入方案 我们使用的开发板是 R128-Devkit&#xff0c;需要开发 C906 核心的应用程序&#xff0c;所以载入方案选择r128s2_module_c906 $ source envsetup.sh $ lunch_rtos 1编辑程序 打…

Windows 系统下本地单机搭建 Redis(一主二从三哨兵)

目录 一、Redis环境准备&#xff1a; 1、下载redis 2、Windows下的.msi安装和.zip格式区别&#xff1a; 二、哨兵介绍&#xff1a; 1、一主二从三哨兵理论图&#xff1a; 2.哨兵的主要功能&#xff1a; 3.哨兵用于实现 redis 集群的高可用&#xff0c;本身也是分布式的&…

锐捷配置PVLAN

一、实验拓扑 二、实验目的 PVLAN可以通过主VLAN和辅助VLAN的概念&#xff0c;部署隔离技术&#xff0c;实现用户间的互访控制。 三、实验配置 SW2 Ruijie >enable Ruijie #configure terminal Ruijie (config)#vlan 20 Ruijie (config-vlan)#private-vlan community …

喜报|迪捷软件“ModelCoder 建模及形式化验证代码生成软件”荣登浙江省首版次产品目录

近日&#xff0c;浙江省经济和信息化厅公布《2023年浙江省首版次软件产品应用推广指导目录》&#xff0c;浙江迪捷软件科技有限公司的“ModelCoder 建模及形式化验证代码生成软件”经过多轮审核及专家评定被纳入目录&#xff0c;这是迪捷软件自主研发的产品继“天目全数字实时仿…

嵌入式科普(5)ARM GNU Toolchain相关概念和逻辑

一、目的/概述 二、资料来源 三、逻辑和包含关系 四、Arm GNU Toolchain最常用的命令 嵌入式科普(5)ARM GNU Toolchain相关概念和逻辑 一、目的/概述 对比高集成度的IDE(MDK、IAR等)&#xff0c;Linux开发需要自己写Makefile等多种脚本。eclipse、Visual Studio等需要了解预处…

冬天天冷早安问候语关心话,愿我的每句话都能带给你温馨

1、送你一声问候&#xff0c;为你驱走冬日严寒&#xff0c;送你一份关怀&#xff0c;为你增添丝丝温暖&#xff0c;送你一句祝福&#xff0c;为你驱走所有不快&#xff0c;送你一份关爱&#xff0c;为你增添幸福无限&#xff0c;天虽寒了&#xff0c;我的关心犹在&#xff0c;愿…

一分钟学会“沉浸式翻译”插件的安装与使用

一、安装 安装地址&#xff1a;https://immersivetranslate.com/ 选择对应的浏览器进入安装即可 二、简单的翻译使用方法 第一次安装需要先刷新界面才可以达到翻译效果 核心需要修改的地方在以下三个&#xff1a; 第一处&#xff1a;设置翻译服务&#xff0c;免费版的可以直接…

uniapp中如何使用百度tts生成文字语音并播放

第一步先在百度云里面申请一个tts应用&#xff0c;这里默认你们都会了哈&#xff0c;申请完是这样的 第二步在manifest.json注册一下 第三步进项目,先获取token handleGetToken() {// client_id和client_secret就是百度API Key和Secret Keyuni.request({url: https://aip.ba…

【PHP手麻系统源码】基于mysql+laravel+vue开发的医院手术麻醉系统源码,实现围术期患者数据的自动采集与共享

手麻系统作为医院信息化系统的一环&#xff0c;由监护设备数据采集系统和麻醉信息管理系统两个子部分组成。手麻信息系统覆盖了患者术前、术中、术后的手术过程&#xff0c;可以实现麻醉信息的电子化和手术麻醉全过程动态跟踪。 以服务围术期临床业务工作的开展为核心&#xf…

人工智能_机器学习070_SVM支持向量机_软间隔及优化_硬间隔_衡量间隔软度_引入松弛变量_理解隔离参数---人工智能工作笔记0110

我们继续说,之前说的C是什么意思? 我们在这个软间隔优化中就可以引出C 可以看到之前我们讨论的问题,都是基于样本点的,完全的线性可分的问题,我们称为硬间隔 可以看到这种,一分就可以,分开,简单分割就可以分开的数据,我们称之为硬间隔 但是可以看到上面这种情况,无论怎么分,都…

Unresolved plugin: ‘org.apache.maven.plugins‘解决报错

新建springboot项目报Unresolved plugin: ‘org.apache.maven.plugins:maven-surefire-plugin:3.1.2’ 缺什么插件 引入什么插件的依赖就行 <dependency><groupId>org.apache.maven.plugins</groupId><artifactId>maven-install-plugin</artifact…

分解质因数C语言

分析&#xff1a;首先我们知道&#xff0c;必须是素数才可以算一次&#xff0c;所以我们先写一个判断素数的函数 int g(int a){int i;for(i2;i<a;i){if(a%i0)return 0;}return 1; } 如果是素数就返回1&#xff0c;不是素数就返回0&#xff1b; 那么当我们输入一个数字的时…

运用ETL快速拉取吉客云平台订单信息

吉客云介绍 吉客云是一家中国的云计算服务提供商。它提供了包括云服务器、云数据库、云存储、云网络等各种云计算产品和解决方案&#xff0c;帮助企业和个人搭建高效、可靠、安全的云计算环境。 吉客云特点和优势&#xff1a; 大规模分布式架构&#xff1a;吉客云基于自主研发…