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


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.mzph.cn/news/238648.shtml

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

相关文章

多切片联合构建3D生物空间图谱

空间转录组(ST,Spatial transcriptomics)技术正在革新探索组织空间结构的方式。目前,ST数据分析通常仅限于单个2D组织切片,限制了我们理解3D空间中发生的生物过程。在这里,作者提出了STitch3D,一…

SpringIOC之LocaleContext

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

Sublime Text 3配置 C# 开发环境

Sublime Text 3配置 C# 开发环境 一、引言二、主要内容1. 初识 Sublime Text 32. 初识 C#3. 接入 .NET Framework3.1 下载 .NET Framework3.2 环境变量配置 4. 配置 C# 开发环境5. 编写 C# 代码6. 运行 C# 代码 三、总结 一、引言 C# 是一种面向对象的编程语言,由微…

100GPTS计划-AI文章扩展ContentExpander

地址 https://chat.openai.com/g/g-jPr6gWUI9-content-expander https://poe.com/ContentExpander 测试 微调 内容扩展器专门用于扩展小说相关文本 上下文微调 保证小说基本风格

【收藏】法律人办案必备检索网站最新汇总!附检索技巧

为什么要进行法律检索?无论你擅长的是做诉讼还是非诉讼业务,法律检索都是必备技能之一。只有做好法律检索才能制定出更加完备的策略报告,才能提供更加充实、可行、准确的方案。 一、数据库检索 1、alpha数据库 https://www.icourt.cc 已经用了3年的大数据库,听说最近降价了…

Unreal5.3 PCG 笔记

目录 ElectricDreams场景功能移动中间山体向周围随机生成倒下的树干树干上随机生成的植被 ElectricDreams场景功能 移动中间山体向周围随机生成倒下的树干 配置内容 中心山体Spline周围沟渠Spline(土堆)PCG规则 主要功能节点 SplineSample(…

大创项目推荐 深度学习+opencv+python实现车道线检测 - 自动驾驶

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数:3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV56 数据集处理7 模型训练8 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 &am…

只知道短视频和直播带货?抖店好像更适合我们普通人哦!项目介绍

我是王路飞。 说道带货,大多数人还是只知道抖音短视频和抖音直播带货。 毕竟,现在众多平台都在往电商方向发展,做电商的方式就是通过短视频和直播的形式带货。 但是,很明显不是所有人都能去做的,尤其是对我们这些普…

亚马逊品牌分析ABA功能有哪些?亚马逊选品的量化标准有哪些?——站斧浏览器

亚马逊品牌分析ABA功能有哪些? 1、品牌市场份额(Share of Voice) ABA提供了品牌在特定类别中市场份额的详细数据。这一模块帮助品牌所有者准确评估其品牌在整个市场中的竞争地位和表现。通过了解市场份额,品牌方可以制定更具针对…

GEOPHYSICS 投稿须知

2018 年 1 月生效的 GEOPHYSICS 文章撰写和格式化指南已修订,并包括支持双重匿名评审的新要求。 一、范围和编辑政策 数据和材料可用性:在投稿过程中,作者被要求说明是否有重现论文中报告的结果所需的数据。 与本研究相关的数据可用&#x…

Midjourney V6版本强势来袭,挑战像素极限!

最新的Midjourney V6模型带来了一系列强大的功能和改进,以下是一些关键特性的总结: AI提示词(第33辑)Midjourney V6版本强势来袭,挑战像素极限!-喜好儿aigc 目前测试已发现: 提示词长度已增至…

类和对象(下篇)

再谈构造函数 构造函数体赋值 在之前的学习中我们知道,在创建一个对象时,我们的编译器就会自动调用构造函数将对象初始化,给对象中各个成员变量一个合适的初始值。 例如: class Date { public:Date(int year, int month, int d…

从零开始创建GPTs 人人都可以编写自己的ChatGPT产品

在这个人工智能迅猛发展的时代,GPT(生成式预训练变换器)已经成为一项令人兴奋的技术,它打开了创意和知识的新大门。无论你是一名编程新手、一位热爱探索的学生,还是对未来充满好奇的专业人士,GPTs都可以为你…

盘点2023年度安防监控行业发展:安防监控技术取得哪些进展?

随着科技的不断发展,安防监控行业也在迅速进步。在今年一年中,安防监控行业的发展也取得了长足的进步。随着2023年渐近尾声,本文将对2023年安防监控行业的发展进行一个盘点和简单的剖析。 1)高清监控设备的发展越来越受到重视 随…

vue事件修饰符

在事件处理函数中调用event.preventDefault()或event.stopPropagation()是非常常见的需求。因此,vue提供了事件修饰符的概念,来辅助程序员更方便的对事件的触发就行控制,常用的5个事件修饰符如下: .prevent格式: .stop格式&#x…

rtsp视频在使用unity三维融合播放后的修正

1 rtsp 接入 我们使用unity UE 等三维渲染引擎中使用c编写插件来接入rtsp 视频。同时做融合的时候,和背景的三维颜色要一致,这就要使用视频融合修正技术。包括亮度,对比度,饱和度的修正。在单纯颜色上的修正可以简单使用rgb->…

Vue 复制、下载 图片和文字

目录 功能描述 图片的格式 复制图片和文字 第一种,直接复制(不推荐) 第二种,画图后复制 下载图片和文字 总结 功能描述 可以简单描述成复制图片和文字,下载图片和文字 前者还好说,比如在图片右键点…

文心一言 VS 讯飞星火 VS chatgpt (162)-- 算法导论13.1 2题

二、用go语言,对图13-1中的红黑树,画出对其调用TREE-INSERT 操作插人关键字 36 后的结果。如果插人的结点被标为红色,所得的树是否还是一棵红黑树?如果该结点被标为黑色呢? 文心一言,代码不能运行: 在Go语言中&…

通过生成表征的自条件图像生成

文章目录 摘要1、简介2、相关工作3、方法4、结果4.1、设置4.2、无条件类别的生成4.3、无分类器指导4.4、消融实验4.5、计算成本4.6、定性结果 5、讨论 摘要 https://arxiv.org/pdf/2312.03701.pdf 本文提出了表示条件图像生成(Representation-Conditioned Image Ge…

python绘制烟花特定爆炸效果,python画烟花绽放出字

大家好,小编来为大家解答以下问题,python绘制烟花特定爆炸效果,python画烟花绽放出字,今天让我们一起来看看吧! 本文参考了https://blog.csdn.net/weixin_43943977/article/details/102691392博主的樱花以及https://bl…