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

2024-01-03 16:28

本文主要是介绍实战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)

这篇关于实战Keras3.0:自定义图片数据集分类任务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/566325

相关文章

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型