自定义数据集图像分类实现
模型训练
要使用自己的图片分类数据集进行训练,这意味着数据集应该包含一个目录,其中每个子目录代表一个类别,子目录中包含该类别的所有图片。以下是一个使用Keras和TensorFlow加载自定义图片数据集进行分类训练的例子。
我们自己创建的数据集结构如下:
data/train/class1/img1.jpgimg2.jpg...class2/imga.jpgimgb.jpg......validation/class1/img3.jpgimg4.jpg...class2/imgc.jpgimgd.jpg......
以下是训练模型的代码:
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# 定义数据集的路径
train_data_path = 'data/train'
validation_data_path = 'data/validation'
# 设置图片大小
img_height = 150
img_width = 150
# 创建ImageDataGenerator实例
train_datagen = ImageDataGenerator(rescale=1./255,rotation_range=40,width_shift_range=0.2,height_shift_range=0.2,shear_range=0.2,zoom_range=0.2,horizontal_flip=True,fill_mode='nearest')
validation_datagen = ImageDataGenerator(rescale=1./255)
# 使用ImageDataGenerator读取数据
train_generator = train_datagen.flow_from_directory(train_data_path,target_size=(img_height, img_width),batch_size=32,class_mode='categorical'
)
validation_generator = validation_datagen.flow_from_directory(validation_data_path,target_size=(img_height, img_width),batch_size=32,class_mode='categorical'
)
# 创建CNN模型
model = Sequential([Conv2D(32, (3, 3), activation='relu', input_shape=(img_height, img_width, 3)),MaxPooling2D(2, 2),Conv2D(64, (3, 3), activation='relu'),MaxPooling2D(2, 2),Conv2D(128, (3, 3), activation='relu'),MaxPooling2D(2, 2),Flatten(),Dense(512, activation='relu'),Dropout(0.5),Dense(train_generator.num_classes, activation='softmax')
])
# 编译模型
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
# 训练模型
history = model.fit(train_generator,steps_per_epoch=train_generator.samples // train_generator.batch_size,epochs=50,validation_data=validation_generator,validation_steps=validation_generator.samples // validation_generator.batch_size
)
# 保存模型
model.save('my_model.h5')
在这个例子中,我们首先定义了训练和验证数据的路径,然后创建了ImageDataGenerator实例来处理图片增强和归一化。接着,我们使用flow_from_directory方法从目录中读取图片数据,并生成批量数据供模型训练使用。然后,我们创建了一个简单的CNN模型,并使用训练和验证数据进行了训练。最后,我们将训练好的模型保存为my_model.h5文件。
模型使用
import tensorflow as tf
from tensorflow.keras.preprocessing import image
import numpy as np
import os
# 加载训练好的模型
model = tf.keras.models.load_model('my_model.h5')
# 定义包含图片的目录
img_directory = 'path_to_directory_with_images'
# 创建ImageDataGenerator实例来获取类别的顺序
datagen = ImageDataGenerator()
generator = datagen.flow_from_directory('path_to_training_data_directory', # 训练数据所在的目录target_size=(150, 150),batch_size=32,class_mode='categorical'
)
# 获取类别到索引的映射
class_indices = generator.class_indices
# 反转映射,从索引到类别名称
inverse_map = {v: k for k, v in class_indices.items()}
# 加载所有图片并进行预处理
img_paths = [os.path.join(img_directory, f) for f in os.listdir(img_directory) if f.endswith(('.png', '.jpg', '.jpeg'))]
img_arrays = [image.load_img(img_path, target_size=(150, 150)) for img_path in img_paths] # 确保这个尺寸与训练时使用的尺寸一致
img_arrays = [image.img_to_array(img) for img in img_arrays]
img_arrays = [img / 255.0 for img in img_arrays] # 归一化
img_array = np.array(img_arrays)
# 使用模型进行预测
predictions = model.predict(img_array)
# 将预测结果转换为类别索引
predicted_classes = np.argmax(predictions, axis=-1)
# 打印预测结果
for i, img_path in enumerate(img_paths):class_index = predicted_classes[i]class_name = inverse_map[class_index]print(f"Image: {img_path}, Predicted class: {class_name}")
我们首先创建了ImageDataGenerator实例并使用了flow_from_directory方法来获取类别到索引的映射。然后,我们将这个映射反转,以便可以从索引得到类别名称。在预测完成后,我们使用predicted_classes中的索引通过inverse_map来获取每个图片对应的类别名称,并打印出来。
请确保path_to_training_data_directory是训练数据所在的目录,这样类别顺序才是正确的。如果训练数据和测试数据不在同一个目录下,你需要确保测试数据的类别顺序与训练数据相同。
相关文章:
自定义数据集图像分类实现
模型训练 要使用自己的图片分类数据集进行训练,这意味着数据集应该包含一个目录,其中每个子目录代表一个类别,子目录中包含该类别的所有图片。以下是一个使用Keras和TensorFlow加载自定义图片数据集进行分类训练的例子。 我们自己创建的数据集…...
【C++】手搓读写ini文件源码
【C】手搓读写ini文件源码 思路需求:ini.hini.cppconfig.confmian.cpp 思路 ini文件是一种系统配置文件,它有特定的格式组成。通常做法,我们读取ini文件并按照ini格式进行解析即可。在c语言中,提供了模板类的功能,所以…...
undolog
undolog回滚段 undolog执行的时间:在执行器操作bufferpool之前。 undolog页...
项目文档分享
Hello , 我是小恒。提前祝福妈妈母亲节快乐 。 本文写一篇初成的项目文档 (不是README.md哈),仅供参考 项目名称 脚本存储网页 项目简介 本项目旨在创建一个网页,用于存储和展示各种命令,用户可以通过粘贴复制命令到…...
【深耕 Python】Quantum Computing 量子计算机(5)量子物理概念(二)
写在前面 往期量子计算机博客: 【深耕 Python】Quantum Computing 量子计算机(1)图像绘制基础 【深耕 Python】Quantum Computing 量子计算机(2)绘制电子运动平面波 【深耕 Python】Quantum Computing 量子计算机&…...
手写Spring5【笔记】
Spring5【笔记】 前言前言推荐Spring5【笔记】1介绍2手写 最后 前言 这是陈旧已久的草稿2022-12-01 23:32:59 这个是刷B站的时候,看到一个手写Spring的课程。 最后我自己好像运行不了,就没写。 现在2024-5-12 22:22:46,发布到[笔记]专栏中…...
2024中国(重庆)机器人展览会8月举办
2024中国(重庆)机器人展览会8月举办 邀请函 主办单位: 中国航空学会 重庆市南岸区人民政府 招商执行单位: 重庆港华展览有限公司 2024中国重庆机器人展会将汇聚机器人全产业链知名企业,世界科技领先的生产制造企业与来自多个国家和地区…...
Apache 开源项目文档中心 (英文 + 中文)
进度:持续更新中。。。 Apache Ambari 2.7.5 Apache Ambari Installation 2.7.5.0 (latest)Apache Ambari Installation 2.7.5.0 中文版 (latest) Apache DolphinScheduler Apache DolphinScheduler 1.2.0 中文版Apache DolphinScheduler 1.2.1 中文版...
蓝桥杯 算法提高 ADV-1164 和谐宿舍 python AC
贪心,二分 同类型题:蓝桥杯 算法提高 ADV-1175 打包 def judge(x):wood 0max_val 0ans_len 0for i in ll:if i > x:return Falseelif max(max_val, i) * (ans_len 1) < x:max_val max(max_val, i)ans_len 1else:wood 1max_val ians_len …...
Dragonfly 拓扑的路由算法
Dragonfly 拓扑的路由算法 1. Dragonfly 上的路由 (1)最小路由(2)非最小路由 2. 评估3. 存在问题 (1)吞吐量限制(2)较高的中间延迟 references Dragonfly 拓扑的路由算法 John Kim, William J. Dally 等人在 2008 年的 ISCA 中提出技术驱动、高度可扩展的 Dragonfly 拓扑。而…...
android基础-服务
同样使用intent来传递服务 oncreate是服务第一次启动调用,onStartCommand是服务每次启动的时候调用,也就是说服务只要启动后就不会调用oncreate方法了。可以在myservice中的任何位置调用stopself方法让服务停止下来。 服务生命周期 前台服务类似于通知会…...
mysql 事物
MySQL中的事务(Transaction)是一个确保数据完整性和一致性的重要概念。它将一组SQL操作捆绑在一起,当作一个单一的工作单元来执行。事务具备以下四个关键特性,即ACID特性: 原子性(Atomicity)&am…...
Unity Shader中获取像素点深度信息
1.顶点着色器中对深度进行计算 v2f vert(appdata v) {v2f o;o.pos UnityObjectToClipPos(v.vertex);o.uv TRANSFORM_TEX(v.uv, _MainTex);o.depth (o.pos.z / o.pos.w 1.0) * 0.5; // Normalize depth to [0, 1]return o; }但是达不到预期,最后返回的值一直大于…...
ROS——Action学习
文章目录 ROS Action概念自定义Action类型参考ROS Action概念 ROS Service会阻塞程序流,程序无法进行其它的工作,有时我们需要同时进行多个任务。 ROS Action可以满足要求,ROS Action提供程序的非阻塞执行。 Action是ROS Node的通信方式之一 Action server 向ROS系统广…...
基于C语言中的类型转换,C++标准创造出了更加可视化的类型转换
目录 前言 一、 C语言中的类型转换 二、为什么C需要四种类型转换 三、C中新增的四种强制类型转换操作符以及它们的应用场景 1.static_cast 2.reinterpret_cast 3.const_cast 4.dynamic_cast 前言 在C语言中,如果赋值运算符左右两侧的类型不同,或者…...
如何创建族表
https://jingyan.baidu.com/article/c275f6bafa5714a23c756768.html...
【UnityRPG游戏制作】Unity_RPG项目_PureMVC框架应用
👨💻个人主页:元宇宙-秩沅 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 秩沅 原创 👨💻 收录于专栏:就业…...
并行计算的一些知识点分享--并行系统,并行程序, 并发,并行,分布式
并行计算 核是个啥? 在并行计算中,“核”通常指的是处理器的核心(CPU核心)。每个核心都是一个独立的处理单元,能够执行计算任务。多核处理器指的是拥有多个这样核心的单一物理处理器,这样的设计可以允许多…...
设计模式:访问者模式
访问者模式(Visitor Pattern)是行为设计模式的一种,它使你能够在不修改对象结构的情况下,给对象结构中的每个元素添加新的功能。访问者模式将数据结构和作用于结构上的操作解耦,使得操作集合可相对自由地演化。 核心概…...
vivado Virtex-7 配置存储器器件
Virtex-7 配置存储器器件 下表所示闪存器件支持通过 Vivado 软件对 Virtex -7 器件执行擦除、空白检查、编程和验证等配置操作。 本附录中的表格所列赛灵思系列非易失性存储器将不断保持更新 , 并支持通过 Vivado 软件对其中所列非易失性存储器 进行擦除、…...
带爱机出国攻略——大机箱反向升级小机箱C28?
大家好,欢迎来到机械大师频道,这不前几天有位粉丝找到我们,说是打算带着自己的爱机出国,但是奈何自己原本的主机实在太大台了,于是想在显卡和内存都不换的情况下,将其他硬件全换了,并且要求机箱…...
太方便了!农村自建房设计新神器,二三维设计 + 扫码看模型
还在为农村自建房设计发愁?手绘图纸看不懂、修改慢、施工易出错?飞扬集成设计系统,专为农村自建房打造,一键实现二三维一体化设计,还能扫码查看轻量化 3D 模型,让建房更高效、更直观、更省心!一…...
牙齿龋齿检测数据集 YOLO模型如何训练牙齿病害数据集 权重识别龋齿
牙齿龋齿检测数据集,2554张,提供yolo和voc两种标注方式 1类,标注数量: caries: 6946 image num: 2554 🦷 龋齿检测数据集 (Dental Caries Detection Dataset) 属性详细描述数据集名称齿科龋齿目标检测数据集图像总数2…...
别再给云存储打工了!手把手教你用飞牛NAS搭建低成本监控中心,守护小店每一分钱。
对于个体商户来说,监控是刚需,但传统的方案要么一次性投入巨大,要么长期订阅云存储费用高昂。本文将介绍一种基于 飞牛NAS 萤石摄像头 的本地化监控方案,旨在帮助商户省钱、好用、省心,实现监控成本的显著降低。&…...
Claude Code桌面控制实战:macOS开启Computer Use指南
Claude Code 的 computer use 功能,是 2026 年 3 月正式上线的原生 macOS 桌面控制能力,让 Claude 可以打开 App、点击、输入、截图,直接在你的真实桌面上完成 GUI 任务。它以内置 MCP 服务器的形式集成到 Claude Code CLI 中,通过…...
W25Q16 Flash存储器:从基础概念到SPI通信实战
1. 认识W25Q16 Flash存储器 第一次接触W25Q16是在做一个智能家居项目时,需要保存用户的WiFi配置和房间温湿度记录。当时试过用单片机内部的EEPROM,但容量太小不够用,后来发现了这款性价比超高的外部Flash芯片。简单来说,W25Q16就像…...
AI算力网络抉择:深度剖析RoCE与InfiniBand的实战选型指南
1. 为什么AI算力网络需要RDMA技术? 当你看到大模型训练任务卡在99%进度条时,那种焦灼感我深有体会。去年我们团队在调试千卡集群时就遇到过这种情况——原本预计72小时完成的训练任务,因为网络延迟问题硬是拖了整整一周。这就是为什么现在所…...
3分钟净化微信社交圈:WechatRealFriends让200+好友检测效率提升99%的秘密
3分钟净化微信社交圈:WechatRealFriends让200好友检测效率提升99%的秘密 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/Wech…...
steam_api.dll是什么文件?全面解析其作用与安全修复方法
不少玩家在启动Steam游戏时,都曾被“无法启动此程序,因为计算机中丢失steam_api.dll”这样的提示拦在门外。看着这串乱码般的文件名,第一反应通常是:这是什么?为什么没了它游戏就不动了?别急,这…...
Kandinsky-5.0-I2V-Lite-5s企业应用:HR招聘海报→候选人互动式动态介绍视频生成
Kandinsky-5.0-I2V-Lite-5s企业应用:HR招聘海报→候选人互动式动态介绍视频生成 1. 引言:让招聘海报"活"起来 想象一下这样的场景:你的HR团队精心设计了一份招聘海报,但投递量却不如预期。问题可能出在传统静态海报难…...
