当前位置: 首页 > news >正文

猫狗分类识别模型建立②模型建立

一、导入依赖库

pip install opencv-python  
pip install numpy  
pip install tensorflow
pip install keras

二、模型建立

'''
pip install opencv-python  
pip install numpy  
pip install tensorflow
pip install keras
'''
import os
import xml.etree.ElementTree as ETimport cv2
import numpy as np
from keras.layers import Input
from keras.models import Model
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.layers import Conv2D, Dense, Flatten, MaxPooling2D
from tensorflow.keras.models import Sequential
from tensorflow.keras.utils import to_categorical# 设置文件夹路径
images_dir = "imgs/"
annotations_dir = "imgs/"
num_classes = 2  # 设置类别总数
input_shape = (128, 128, 3)
# 模型名称
model_name = "dog_cat.keras"
# 用于存储图像数据和标签的列表
images = []
labels = []"""
1 dog 狗
2 cat 猫
"""
# 假设我们有一个从标签文本到标签索引的映射字典
label_to_index = {"dog": 0,"cat": 1,# ... 添加其他类别
}# 遍历文件夹加载数据
for filename in os.listdir(images_dir):if filename.endswith(".png"):image_path = os.path.join(images_dir, filename)annotation_path = os.path.join(annotations_dir, filename[:-4] + ".xml")# 读取图像image = cv2.imread(image_path)image = cv2.resize(image, (128, 128))  # 调整图像大小images.append(image)# 解析XML标注文件获取标签tree = ET.parse(annotation_path)root = tree.getroot()object_element = root.find("object")if object_element is not None:label_text = object_element.find("name").textlabel_index = label_to_index.get(label_text)if label_index is not None:labels.append(label_index)else:print(f"Warning: Unknown label '{label_text}', skipping.")# 转换为NumPy数组并进行归一化
images = np.array(images) / 255.0
labels = np.array(labels)# 确保所有的标签都是有效的整数
if labels.dtype != int:raise ValueError("Labels must contain only integers.")labels = to_categorical(labels, num_classes=num_classes)  # 假设num_classes是类别的总数# 使用Functional API定义模型
# 创建一个输入层,shape参数指定了输入数据的形状,input_shape是一个之前定义的变量,表示输入数据的维度。
inputs = Input(shape=input_shape)
# 下面的每一行都是通过一个层对数据进行处理,并将处理后的结果传递给下一个层。
# 对输入数据进行卷积操作,使用32个3x3的卷积核,并使用ReLU激活函数。结果赋值给变量x。
x = Conv2D(32, (3, 3), activation="relu")(inputs)
# 对x进行最大池化操作,池化窗口大小为2x2。这有助于减少数据的空间尺寸,从而减少计算量并提取更重要的特征。
x = MaxPooling2D(pool_size=(2, 2))(x)
# 再次进行卷积操作,这次使用64个3x3的卷积核,并继续使用ReLU激活函数。
x = Conv2D(128, (3, 3), activation="relu")(x)
# 再次进行最大池化操作,进一步减少数据的空间尺寸。
x = MaxPooling2D(pool_size=(2, 2))(x)
x = Flatten()(x)  # 将多维的数据展平为一维,以便后续可以连接到全连接层(或称为密集层)。
# 创建一个全连接层,包含64个神经元,并使用ReLU激活函数。这一层可以进一步提取和组合特征。
x = Dense(128, activation="relu")(x)
# 创建一个输出层,神经元的数量与类别的数量(num_classes)相等。使用softmax激活函数,将输出转换为概率分布。
outputs = Dense(num_classes, activation="softmax")(x)
# 使用输入和输出来创建模型实例
model = Model(inputs=inputs, outputs=outputs)  # 通过指定输入和输出来定义模型的结构。
# 编译模型,指定优化器、损失函数和评估指标
# 使用Adam优化器、分类交叉熵损失函数,并监控准确性指标。
model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])# 使用图像数据和标签训练模型
# 使用fit方法训练模型,指定训练数据、训练轮次(epochs)和批处理大小(batch_size)。
model.fit(images, labels, epochs=55, batch_size=512)# 保存训练好的模型到文件
# 将训练好的模型保存为HDF5文件,以便以后加载和使用。
model.save(model_name)
# keras.saving.save_model(model, "cnn_model.keras")
# model.save("cnn_model.h5")

三、文件结构及构建的模型

①文件结构

②建立后的模型

相关文章:

猫狗分类识别模型建立②模型建立

一、导入依赖库 pip install opencv-python pip install numpy pip install tensorflow pip install keras 二、模型建立 pip install opencv-python pip install numpy pip install tensorflow pip install kerasimport os import xml.etree.ElementTree as ETimpor…...

React Native 之 ToastAndroid(提示语)(二十一)

ToastAndroid 是 React Native 提供的一个特定于 Android 平台的 API,用于显示简单的消息提示(Toast)。 两个方法: 1. ToastAndroid.show(message, duration, gravity) message: 要显示的文本消息。duration: Toast 的持续时间&…...

合约之间调用-如何实现函数静态调用?

合约之间的函数调用 EOA,external owned account,外部账号,例如metamask调用最终总是由EOA发起的合约之间的调用使得一次完整的调用成为一个调用链条 合约间调用过程 调用者须持有被调用合约的地址得到被调用合约的信息将地址重载为被调用合…...

【5.基础知识和程序编译及调试】

一、GCC概述:是GUN推出的多平台编译器,可将C/C源程序编译成可执行文件。编译流程分为以下四个步骤: 1、预处理 2、编译 3、汇编 4、链接 注:编译器根据程序的扩展名来分辨编写源程序所用的语言。根据不同的后缀名对他们进行相…...

微信小程序(路由传参)

微信小程序的路由系统和其他Web应用类似,主要通过页面路径和URL参数进行页面导航和数据传递。下面详细介绍微信小程序路由的基本使用方法和相关技巧。 1. 基本页面导航 1.1 配置页面路径 在微信小程序的 app.json 文件中,需要配置小程序的页面路径。这…...

电脑显示不出网络

你的电脑是否在开机后显示不出网络,或者有网络消失的现象?今天和大家分享我学到的一个办法,希望对大家有用。 分析出现这类现象的原因:可能是电脑网卡松动了,电脑中存在静电流。 解决办法:先将电脑关机&am…...

random模块一

random模块 用于生成随机数。 random()返回[0,1)之间随机浮点数 例子: import randomfor i in range(5):print(random.random()) 结果: 0.5026620465128847 0.9841750667006002 0.5515465602585887 0.42796563433917456 0.2627959451391586 see…...

Spring OAuth2:开发者的安全盾牌!(下)

上文我们教了大家如何像海盗一样寻找宝藏,一步步解锁令牌的奥秘,今天将把更加核心的技巧带给大家一起学习,共同进步! 文章目录 6. 客户端凭证与密码模式6.1 客户端凭证模式应用适用于后端服务间通信 6.2 密码模式考量直接传递用户…...

kotlin基础之协程

Kotlin协程(Coroutines)是Kotlin提供的一种轻量级的线程模型,它允许我们以非阻塞的方式编写异步代码,而无需使用回调、线程或复杂的并发API。协程是一种用户态的轻量级线程,它可以在需要时挂起和恢复,从而有…...

法那科机器人M-900iA维修主要思路

发那科工业机器人是当今制造业中常用的自动化设备之一,而示教器是发那科机器人操作和维护的重要组成部分。 一、FANUC机械手示教器故障分类 1. 硬件故障 硬件故障通常是指发那科机器人M-900iA示教器本身的硬件问题,如屏幕损坏、按键失灵、电源故障等。 2…...

01_Spring Ioc(详解) + 思维导图

文章目录 一.概念实操Maven父子工程 二. IOC和DI入门案例【重点】1 IOC入门案例【重点】问题导入1.1 门案例思路分析1.2 实现步骤2.1 DI入门案例思路分析2.2 实现步骤2.3 实现代码2.4 图解演示 三、Bean的基础配置问题导入问题导入1 Bean是如何创建的【理解】2 实例化Bean的三种…...

Python开发Android手机APP

Kivy是一个开源的Python库,用于快速开发跨平台的触摸应用程序。它特别适合创建具有图形用户界面(GUI)的应用,尤其是那些需要在多种操作系统(如Windows、macOS、Linux、Android和iOS)上运行的多点触控应用。…...

Spring Cache自定义缓存key和过期时间

一、自定义全局缓存key和双冒号替换 使用 Redis的客户端 Spring Cache时,会发现生成 key中会多出一个冒号,而且有一个空节点的存在。 查看源码可知,这是因为 Spring Cache默认生成key的策略就是通过两个冒号来拼接。 同时 Spring Cache缓存…...

条件竞争漏洞

条件竞争漏洞 postMessage的客户端竞争条件 Summary AppCache可以被利用来强制浏览器加载后备的HTML页面,允许像Cookie填充(stuffing)这样的攻击,迫使出错并泄露敏感的URL。在负责任披露后,这个问题已经在各大浏览器中得到修复。对AWS S3和Google Cloud等云存储的上传策略(u…...

磁带存储:“不老的传说”依然在继续

现在是一个数据指数增长的时代,根据IDC数据预测,2025年全世界将产生175ZB的数据。 这里面大部分数据是不需要存储的,在2025预计每年需要存储11ZB的数据。换算个容易理解的说法,1ZB是10^18Bytes, 相当于要写5556万块容量18TB的硬盘…...

CentOS8环境下FTP服务器安装与配置

在本指南中,我们将一步步介绍如何在CentOS 8环境下安装和配置一个FTP服务器。FTP(文件传输协议)是一种网络传输协议,用于在网络中的计算机之间传输文件。虽然现在有更安全的传输方式,如SFTP或FTP over SSL,…...

C# 元组 Tuple

C# 元组 Tuple 元组创建元组访问元组元素命名元组元素元组的类型使用元组作为方法返回值 解构解构元组的基本用法解构部分元组解构方法 元组 在C#中,元组(Tuple)是一种数据结构,它允许你将多个值组合成一个单一的对象。 元组在处…...

100个投资者99个选择使用这款EA,WeTrade发现1个事实

为什么100个投资者会有99个选择使用这款EA,是因为这款EA能提供两个版本吗?是因为能控制风险吗?都不是,WeTrade发现1个事实才是这么多投资者选择的原因,那就是能实现100%的盈利率。 我们都知道外汇狙击手EA提供两种版本,分别是标…...

爬虫面试手册

爬虫面试手册 薪资13~20k 岗位职责: 负责公司数据平台的数据采集、运维优化;负责自动化脚本,爬虫脚本;研究数据采集策略和防屏蔽规则,提升数据采集系统的稳定性、可扩展性,提高抓取的效率和质量; 岗位要求 本科及…...

k8s cephfs(动态pvc)

官方参考文档:GitHub - ceph/ceph-csi at v3.9.0 测试版本 Ceph Version Ceph CSI Version Container Orchestrator Name Version Tested v17.2.7 v3.9.0 Kubernetes v1.25.6 安装Ceph-csi Step 1 Download GitHub - ceph/ceph-csi at v3.9.0 rootsd-k8s…...

<6>-MySQL表的增删查改

目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表&#xf…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

day36-多路IO复用

一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...