实战Keras3.0:自定义图片数据集分类任务

一、创建自定义图片数据集

1、数据收集

以10张小狗图片和10张小猫图片为例

c6ea5a14cba94e4fa286394997a8b4ee.jpeg

692c4c04d29a4b648b29ef8cd13c061f.jpeg

2、数据预处理

1、创建Excel表格,并在其中创建两列,一列是图片路径,另一列是对应的标签(狗0、猫1)

af1b67e770f449aab427027c8c054e71.jpeg

 2、用pandas库的read_excel函数读取Excel,用PIL库的Image函数将图片数据格式化

import pandas as pd
from sklearn.model_selection import train_test_split
import keras
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt#读取Excel表格
data = pd.read_excel('/Users/Desktop/cat_dog/dog_and_cat.xlsx')#图片数据处理
def imageDigitization(image_data):train_data = []for image_item  in image_data:#读取图片img = Image.open(image_item)# 缩放图片img_resized = img.resize((200, 200))img_array = np.array(img_resized)train_data.append(img_array)return np.array(train_data)  #标签数据处理
def labelDigitization(y):train_label=[]for label_item in y:train_label.append(label_item)return  np.array(train_label)  #格式化图片和标签数据  
X = data['A'].values
X = imageDigitization(X)
y = data['B'].to_list()
y = labelDigitization(y)#图片数据归一化
X= X.astype('float32') /255.0  

3、验证数据

用matplotlib库pyplot查看数据集,因图像NumPy数组,标签是整数数组。这些标签对应于图像所代表的类别,由于数据集不包括类名称,所以将根据标签的整数自定义映射名称的数组。

#验证数据
class_names = ['dog', 'cat']plt.figure(figsize=(20,20))
for i in range(20):plt.subplot(10,10,i+1)plt.xticks([])plt.yticks([])plt.grid()plt.imshow(X[i], cmap=plt.cm.binary)plt.xlabel(class_names[y[i]])
plt.show()

56ee9bcac2b9487398b8a33661a681cb.jpeg

4、数据准备

用sklearn库的train_test_split划分训练集和测试集,标签one-hot编码。

# 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)#标签one-hot编码
y_train = keras.utils.to_categorical(y_train,num_classes=2)
y_test = keras.utils.to_categorical(y_test,num_classes=2)

二、搭建网络

任务类型猫、狗图像二分类问题

# 创建一个Sequential模型
model = Sequential()# 添加第一个卷积层,使用32个3x3的卷积核,激活函数为ReLU,输入形状为200x200x3
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(200,200, 3)))# 添加第二个卷积层,使用64个3x3的卷积核,激活函数为ReLU
model.add(Conv2D(64, (3, 3), activation='relu'))# 添加最大池化层,池化大小为2x2
model.add(MaxPooling2D(pool_size=(2, 2)))# 将卷积层的输出展平,以便输入到全连接层
model.add(Flatten())# 添加一个全连接层,使用128个神经元,激活函数为ReLU
model.add(Dense(128, activation='relu'))# 添加一个输出层,使用2个神经元,激活函数为softmax
model.add(Dense(2, activation='softmax'))# 编译模型,优化器为Adam,损失函数为分类交叉熵,评估指标为准确率
model.compile(optimizer='adam', loss='categorical_crossentropy',  metrics=['accuracy'])

模型结构 

Model: "sequential"
_________________________________________________________________Layer (type)                Output Shape              Param #   
=================================================================conv2d (Conv2D)             (None, 198, 198, 32)      896       conv2d_1 (Conv2D)           (None, 196, 196, 64)      18496     max_pooling2d (MaxPooling2  (None, 98, 98, 64)        0         D)                                                              flatten (Flatten)           (None, 614656)            0         dense (Dense)               (None, 128)               78676096  dense_1 (Dense)             (None, 2)                 258       =================================================================
Total params: 78695746 (300.20 MB)
Trainable params: 78695746 (300.20 MB)
Non-trainable params: 0 (0.00 Byte)

三、模型训练

保存模型、评估准确率

#模型训练
history=model.fit(X_train, y_train,validation_data=(X_test, y_test),epochs=20,verbose=1)#保存模型
model_path = '/Users/code/model/dog_and_cat.keras'
model.save(model_path)#评估准确率
test_loss, test_acc = model.evaluate(X_test, y_test, verbose=2)
print('\nTest accuracy:', test_acc)

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

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

相关文章

java企业人事信息管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web企业人事信息管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境 为TOMCAT7.0,Myeclipse8.5开发,数据库为M…

RTC第二个功能和应用程序

一般RTC模块设备管理时间日历、计时器等。从年到二。一些爱普生RTC 模块可以通过使用来自32768 Hz的分割频率来管理次第二功能。本文件 描述了RTC模块的三个具体的应用程序。(表1) 表1中的功能和产品 [FOUT函数应用程序] 图1描述了RTC模块&#xff0…

Python数据挖掘与机器学习实践技术应用

近年来,Python编程语言受到越来越多科研人员的喜爱,在多个编程语言排行榜中持续夺冠。同时,伴随着深度学习的快速发展,人工智能技术在各个领域中的应用越来越广泛。机器学习是人工智能的基础,因此,掌握常用…

qt .pro工程转vs工程

1. 新建vs空项目或者Qt Console Application; 2. 扩展 -》Qt VS Tools -》Open Qt Project (.pro) 打开对应的pro文件即可将.pro工程转成vs工程; 注意: (1)转成的vs工程在pro文件同级目录下,双击打开vcx…

桶式移位器

前言 本篇文章介绍CPU的核心部件之一:桶式移位器,简称BS,英文全称为Barrel Shifter 桶式移位器最大的特点就是能在单周期内完成多种方式,各种位数的移位操作 常见的移位操作 常见的移位操作种类如下: 算术右移 是指…

实验笔记之——基于windows复现Instant-NGP

之前博客对NeRF-SLAM进行了调研,本博文先复现一下Intant-NGP。 学习笔记之——NeRF SLAM(基于神经辐射场的SLAM)-CSDN博客文章浏览阅读851次,点赞22次,收藏21次。NeRF 所做的任务是 Novel View Synthesis(…

在前端开发中,如何优化网站的加载速度?

在前端开发中,网站的加载速度是一个至关重要的因素,它直接影响着用户体验和搜索引擎优化(SEO)。一个快速、响应迅速的网站不仅能让用户更加满意,还能提高网站的排名和流量。那么,如何优化网站的加载速度呢&…

el-radio-button自适应充满盒子的写法

业务场景&#xff1a;当盒子较宽时&#xff0c;希望 el-radio-button 自适应充满盒子。 el-radio-button 自适应充满盒子的写法 <el-form :inline"true" :model"searchForm"><el-form-item style"display: flex; align-items: center;"…

【Java EE初阶七】多线程案例(阻塞队列与生产者消费者模型)

1. 阻塞队列 队列是先进先出的一种数据结构&#xff1b; 阻塞队列&#xff0c;是基于队列&#xff0c;做了一些扩展&#xff0c;适用于多线程编程中&#xff1b; 阻塞队列特点如下&#xff1a; 1、是线程安全的 2、具有阻塞的特性 2.1、当队列满了时&#xff0c;就不能往队列里…

串口通信要点解析

目录 简介&#xff1a; UART 协议解析&#xff1a; 串口协议工作过程&#xff1a; 简介&#xff1a; 串行通信协议包括&#xff1a; UART通用异步收发传输器 (Universal Asynchronous ReceiverTransmitter) 是一种串行异步收发协议 (异步是指通信双方使用各自的时钟控制数据…

fineBI web组件传参

1、fineBI web组件传参 1.1、 Web组件- FineBI帮助文档 FineBI帮助文档1. 概述1.1 版本FineBI 版本HTML5移动端展现功能变动6.0--V11.0.83web组件适配移动端效果优化6.0.13-web组件支持传递参数 ${过滤组件https://help.fanruan.com/finebi/doc-view-143.html 1.2、自己做的例…

分布式(6)

目录 26.雪花算法如何实现的&#xff1f; 27.雪花算法有什么问题&#xff1f;有哪些解决思路&#xff1f; 28.有哪些方案实现分布式锁&#xff1f; 29.基于数据库如何实现分布式锁&#xff1f;有什么缺陷&#xff1f; 30.基于Redis如何实现分布式锁&#xff1f;有什么缺陷&…

VS 2022 控制台程序运行时不显示控制台

Visual Studio 2022&#xff0c;C#控制台程序运行时不显示控制台。此外&#xff0c;C#程序修改运行时的程序名。 文章目录 不显示控制台修改运行时的程序名打包成.exe 文件 不显示控制台 1 选中需要项目&#xff0c;右击属性&#xff0c;选中常规。 2 将输出类型从控制台改为…

微服务-@FeignClient 与 Feign 隔离

FeignClient 扫描 FeignClientsRegistrar#registerBeanDefinitions public void registerBeanDefinitions(AnnotationMetadata metadata,BeanDefinitionRegistry registry) { // 注册默认配置 registerDefaultConfiguration(metadata, registry); registerFeignClients(metada…

服务异步通讯---RabbitMQ实用篇

目录 一、初识MQ 一、同步调用 1、同步通讯和异步通讯 2、同步调用的问题 3.同步调用总结 二、异步调用 1、优势&#xff1a; ​编辑 2、异步总结 二、什么是MQ 一、RabbitMQ快速入门 1、RabbitMQ的结构和概念 2、常见消息模型 2.1、基础消息队列模型 2.2、总结 二…

Sharding-JDBC快速使用【笔记】

1 引言 最近在使用Sharding-JDBC实现项目中数据分片、读写分离需求&#xff0c;参考官方文档&#xff08;Sharding官方文档&#xff09;感觉内容庞杂不够有条理&#xff0c;重复内容比较多&#xff1b;现结合项目应用整理笔记如下供大家参考和自己回忆使用&#xff1b; 在…

为什么要太空探索?未来万亿人口 人类移居太空是不可避免的。大语言模型是发现 贝索斯

管理的思考 「最以客户为中心」「果断」「如何决策」 贝索斯给亚马逊的使命是「世上最以客户为中心的公司」(以客户需求为起点&#xff0c;反向推动工作)。贝索斯给蓝色起源的使命是「世上最果断的公司」(我们将变得非常擅长在技术上恰当地冒险&#xff0c;并快速地作出那些决…

一篇了解springboot3请求参数种类及接口测试

SpringBoot3数据请求&#xff1a; 原始数据请求&#xff1a; //原始方式RequestMapping("/simpleParam")public String simpleParam(HttpServletRequest request){//获取请求参数String name request.getParameter("name");String age request.getParame…

钉钉-蓝牙打卡和平台打卡的区别

钉钉的群是部门概念。 你的账号归属到哪个群&#xff0c;就是哪个群的员工。 -------------------------------------------------------------------- 蓝牙打卡是对账号归属进行打卡的。 平台打卡是只对属于自己平台内的账号打卡的。 ----------------------------------…

【MATLAB】PSO粒子群优化BiLSTM(PSO_BiLSTM)的时间序列预测

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 基于PSO粒子群优化的BiLSTM的时间序列预测算法的基本原理如下&#xff1a; 「双向长短时记忆&#xff08;BiLSTM&#xff09;模型」&#xff1a;这是一种深度学习模型&#xff0c;特别适用…