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

基于Python实现的完整解决方案,用于对包含四个类别的1500张图像数据集进行分割、训练模型,并提供简易前端和可视化结果

以下是一个基于Python实现的完整解决方案,用于对包含四个类别的1500张图像数据集进行分割、训练模型,并提供简易前端和可视化结果。我们将使用Keras构建一个简单的卷积神经网络(CNN)模型,使用Streamlit创建简易前端,使用Scikit-learn进行模型评估和可视化。

步骤概述

  1. 数据准备:加载和预处理数据集,将其划分为训练集、验证集和测试集。
  2. 模型构建:构建一个简单的CNN模型。
  3. 模型训练:使用训练集对模型进行训练。
  4. 模型评估:使用测试集评估模型,计算F1分数、准确率、混淆矩阵和PR曲线。
  5. 前端开发:使用Streamlit创建简易前端,展示训练结果和可视化图表。

代码实现

import os
import numpy as np
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from sklearn.metrics import f1_score, confusion_matrix, precision_recall_curve
import matplotlib.pyplot as plt
import seaborn as sns
import streamlit as st

# 数据准备
data_dir = 'your_data_directory'  # 替换为你的数据集目录
img_height = 150
img_width = 150
batch_size = 32

# 数据增强和归一化
train_datagen = ImageDataGenerator(
    rescale=1./255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
    validation_split=0.2
)

train_generator = train_datagen.flow_from_directory(
    data_dir,
    target_size=(img_height, img_width),
    batch_size=batch_size,
    class_mode='categorical',
    subset='training'
)

validation_generator = train_datagen.flow_from_directory(
    data_dir,
    target_size=(img_height, img_width),
    batch_size=batch_size,
    class_mode='categorical',
    subset='validation'
)

# 模型构建
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(128, activation='relu'),
    Dense(4, activation='softmax')
])

# 模型编译
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# 模型训练
epochs = 10
history = model.fit(
    train_generator,
    steps_per_epoch=train_generator.samples // batch_size,
    validation_data=validation_generator,
    validation_steps=validation_generator.samples // batch_size,
    epochs=epochs
)

# 模型评估
test_generator = train_datagen.flow_from_directory(
    data_dir,
    target_size=(img_height, img_width),
    batch_size=batch_size,
    class_mode='categorical',
    shuffle=False
)

y_pred = model.predict(test_generator)
y_pred_classes = np.argmax(y_pred, axis=1)
y_true = test_generator.classes

# 计算F1分数和准确率
f1 = f1_score(y_true, y_pred_classes, average='weighted')
accuracy = np.mean(y_true == y_pred_classes)

# 混淆矩阵
cm = confusion_matrix(y_true, y_pred_classes)

# PR曲线
precision = dict()
recall = dict()
for i in range(4):
    precision[i], recall[i], _ = precision_recall_curve(y_true == i, y_pred[:, i])

# 前端开发
st.title('图像分类模型训练结果')

# 显示F1分数和准确率
st.write(f'F1分数: {f1:.2f}')
st.write(f'准确率: {accuracy:.2f}')

# 显示混淆矩阵
fig_cm, ax_cm = plt.subplots()
sns.heatmap(cm, annot=True, fmt='d', ax=ax_cm)
ax_cm.set_xlabel('预测标签')
ax_cm.set_ylabel('真实标签')
st.pyplot(fig_cm)

# 显示PR曲线
fig_pr, ax_pr = plt.subplots()
for i in range(4):
    ax_pr.plot(recall[i], precision[i], lw=2, label=f'类别 {i}')
ax_pr.set_xlabel('召回率')
ax_pr.set_ylabel('精确率')
ax_pr.legend()
st.pyplot(fig_pr)

代码说明

  1. 数据准备:使用ImageDataGenerator对图像进行数据增强和归一化处理,并将数据集划分为训练集和验证集。
  2. 模型构建:构建一个简单的CNN模型,包含卷积层、池化层、全连接层。
  3. 模型训练:使用fit方法对模型进行训练,指定训练集、验证集和训练轮数。
  4. 模型评估:使用测试集对模型进行评估,计算F1分数、准确率、混淆矩阵和PR曲线。
  5. 前端开发:使用Streamlit创建简易前端,展示训练结果和可视化图表。

运行步骤

  1. 将数据集放在your_data_directory目录下,每个类别放在一个单独的子目录中。
  2. 安装所需的库:pip install tensorflow streamlit seaborn
  3. 运行代码:streamlit run your_script.py

注意事项

  • 请确保数据集的路径正确,并且每个类别都有足够的样本。
  • 可以根据需要调整模型的结构和训练参数,以提高模型的性能。

http://www.kler.cn/a/539197.html

相关文章:

  • Centos Ollama + Deepseek-r1+Chatbox运行环境搭建
  • Render上后端部署Springboot + 前端Vue 问题及解决方案汇总
  • sqlite 查看表结构
  • 《ARM64体系结构编程与实践》学习笔记(四)
  • cefsharp131升级132测试(WinForms.NETCore)
  • 网络安全:挑战、技术与未来发展
  • Java 网络原理 ⑤-DNS || 以太网
  • 【RocketMQ 存储】- 异步刷盘服务 FlushRealTimeService
  • Python 报错分析:IndexError: list index out of range
  • Node.js 中模块化
  • 什么是Prompt工程?
  • 蓝耘智算平台与DeepSeek R1模型:推动深度学习发展
  • 企业如何利用DeepSeek提升网络安全管理水平
  • 【JAVAFX】textarea插入数据后滚动条自动到底部
  • 量化交易数据获取:xtquant库的高效应用
  • Transformer中的嵌入位置编码
  • Golang:Go 1.23 版本新特性介绍
  • 小程序实现消息订阅通知完整实践及踩坑记录
  • AI绘画:开启艺术与科技融合的未来之门(10/10)
  • Unity3D仿星露谷物语开发28之切换场景
  • 【神经网络框架】非局部神经网络
  • [LeetCode]day18 202.快乐数
  • Redis的数据过期策略和数据淘汰策略
  • 【计算机视觉】多分辨率金字塔全解析 ✨
  • 机试题——D路通信
  • Sparse4D v3:推进端到端3D检测和跟踪