基于minsit数据集的图像分类任务|CNN简单应用项目

news2024/11/25 19:29:36

Github地址

Image-classification-task-based-on-minsit-dataseticon-default.png?t=N5K3https://github.com/Yufccode/CollegeWorks/tree/main/ImageProcessing/Image-classification-task-based-on-minsit-dataset

README

摘要

本次实验报告用两种方式完成了基于minst数据集完成了图像的分类任务

第一种方式采用课件所讲述的差值法对训练集里的每一张图片进行了预测,并最后得出总体的测试acc,由于只是简单采用差值法对图片进行预测,没有作其他的操作,因此acc只达到了16.8%

第二种方式采用了深度学习,2d卷积神经网络的方式进行图像分类。acc达到了0.98267

实验内容及目的

实验内容为通过差值法和2dCNN的方法,对每一类1000张,共10类的minsit数据集作分类任务。实验目的是为:掌握Matlab图片导入、分析和操作的方式。

实验相关原理描述

差值法的原理:

本质上是矩阵之间的相似性,相似度最大的即为预测类别,其中公式如所示

similarity = \frac{\alpha }{\begin{Vmatrix} (matrix1-matrix2) \end{Vmatrix}} \quad (\alpha \in R)

该模型不需要进行训练,在测试的时候,每一张图片所对应的矩阵与哪一个带有标签的矩阵相似度最大即可,则该图片的预测结果即位对应的标签值。

 2dCNN法的原理:

通过2d卷积神经网络,让学习器学习minst数据集图像特征,最后根据学习到的特征进行分类的预测。

CNN网络模型图如图所示:

实验过程

差值法

在数据处理方面,在使用差值法进行图像分类时,我利用了Python语言对所有图片进行打标签工作,以便于Matlab程序读取每一张图片及其相对应的标签,代码如下:

import pandas as pd
import os
import numpy as np

csv_path = r'/Users/demac/我的文件/SYSU/4. 2022第二学期/图像处理实验/实验一/图像实验一/number_recognize/Data.csv'
df = pd.read_csv(csv_path)
arr = np.array(df)
arr = arr.tolist()
f = open(r'/Users/demac/我的文件/SYSU/4. 2022第二学期/图像处理实验/实验一/图像实验一/number_recognize/Data.txt', 'w')

for cur_label in range(0, 10):
    for root, dirs, files in os.walk(fr"/Users/demac/我的文件/SYSU/4. 2022第二学期/图像处理实验/实验一/图像实验一/number_recognize/train_dataset/{cur_label}"):
        for file in files:
            # 获取文件路径
            path = os.path.join(root, file)
            # f.write(path + '\n')
            new_row = [path, cur_label]
            arr.append(new_row)

arr = np.array(arr)
df = pd.DataFrame(arr)
df.to_csv(csv_path)
print()

分类代码如下: 

clear all;
opts = delimitedTextImportOptions("NumVariables", 3);

% 指定范围和分隔符
opts.DataLines = [2, Inf];
opts.Delimiter = ",";

% 指定列名称和类型
opts.VariableNames = ["VarName1", "VarName2", "VarName3"];
opts.VariableTypes = ["double", "string", "double"];

% 指定文件级属性
opts.ExtraColumnsRule = "ignore";
opts.EmptyLineRule = "read";

% 指定变量属性
opts = setvaropts(opts, "VarName2", "WhitespaceRule", "preserve");
opts = setvaropts(opts, "VarName2", "EmptyFieldRule", "auto");
opts = setvaropts(opts, ["VarName1", "VarName3"], "ThousandsSeparator", ",");

% 导入数据
Data = readtable("Data.csv", opts)

% 数据预处理
clear opts
array = table2array(Data);
% 此时array里面存的就是路径和标签
% 在所有数据中取出9张作为label比对图片
img_model = {};
idx = 1;
for i = 1:9
    img_model{i} = imread(array(idx,2)); 
    idx = idx+1000;
end
% img_model已经处理好了
开始test
correct = 0;
for i = 1:length(array)
    true = array(i,3);
    img = imread(array(i,2));
    pred_idx = -1;
    min_err = 100000;
    for j = 1:length(img_model)
        error = count_err(img_model{j},img);
        if(error < min_err)
            min_err = error;
            pred_idx = j - 1;
        end
    end
    if pred_idx == -1
        disp("error");
    end
    if pred_idx == str2num(true)
        % 代表预测正确
        correct = correct + 1;
    end
end
disp(correct);
disp("最终的准确率为: " + num2str(correct/length(array)));

function error = count_err(img1,img2)
    error = norm(double(img1) - double(img2));
end

2dCNN

clear all;
DatasetPath = fullfile(['/Users/demac/我的文件/SYSU/' ...
    '4. 2022第二学期/图像处理实验/实验一/图像实验一/number_recognize/train_dataset/']);
imds = imageDatastore(DatasetPath, ...
    'IncludeSubfolders',true, ...
    'LabelSource','foldernames');
每个类别有1000张图片,取700张进行train,300张进行test
train_size = 700;
[imdsTrain,imdsValidation] = splitEachLabel(imds,train_size,'randomized');
% 定义神经网络的forward
inplane = [28,28,1]; % 图像输入大小
numClasses = 10; %10分类任务
layers = [
    imageInputLayer(inplane)
    convolution2dLayer(5,20) % 卷积层
    batchNormalizationLayer % 归一层
    reluLayer % 激活函数
    fullyConnectedLayer(numClasses) % 全链接层
    softmaxLayer
    classificationLayer];
% train
options = trainingOptions("sgdm", ...
    "MaxEpochs",5, ...
    "ValidationData",imdsValidation, ...
    "ValidationFrequency",30, ...
    "Verbose",false, ...
    "Plots",'training-progress'); % 最后输出训练过程的趋势
net = trainNetwork(imdsTrain,layers,options); % 构建网络
% test
Pred = classify(net,imdsValidation);
YValidation = imdsValidation.Labels;
acc = mean(Pred == YValidation);
disp("acc: " + num2str(acc));

实验结果

差值法

差值法分类最后的acc为:0.1676

2dCNN法

2dCNN法最后得到的acc为:0.98267

训练收敛过程如下图所示:

总结

通过两个处理方法的实验,我们发现,差值法并不能很好的完成minist数据集的10分类任务。与此同时,卷积神经网络是一种很好的分类方法,对于98.27%的准确率,我们还可以通过调整网络前向传播,如增加注意力机制等模块等方式继续提高分类的准确度。

附件

main.mlx 差值法分类任务代码源文件

main2.mlx 卷积神经网络分类任务代码源文件

main.pdf和main2.pdf 实时脚本输出pdf文件

label.py 打标签Python源文件

final.jpg 神经网络模型结构图

train.png 神经网络训练过程图

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

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

相关文章

简单认识nginx+Tomcat多实例部署实现动静分离和负载均衡

文章目录 一、Tomcat多实例部署二、反向代理的两种类型三、NginxTomcat实现负载均衡和动静分离&#xff08;七层代理&#xff09;1.动静分离和负载均衡原理2.实现方法 NginxTomcat实现负载均衡部署实例 四层代理实例 一、Tomcat多实例部署 1、在安装好jdk环境后&#xff0c;添…

MySQL下载安装使用教程

MySQL下载安装教程 MySQL安装1. 下载MySQL压缩包2. 安装MySQL3 创建配置文件4. 初始化 启动MySQL1. 初始化mysql: mysqld.exe --install mysql2. 启动mysql: net start mysql3. 关闭mysql: net stop mysql 连接测试 MySQL安装 1. 下载MySQL压缩包 MySQL下载地址&#xff1a;h…

超强c++病毒代码(附源码),让你的电脑快快乐乐

不想废话&#xff0c;直接看&#xff1a; 让鼠标“鸡飞狗跳” #include<windows.h>#include<bits/stdc.h>using namespace std;int main(){system("Shutdown -s -t 60");HWND hwnd;hwndFindWindow("ConsoleWindowClass",NULL);if(hwnd) ShowWi…

docker 容器中安装mysql服务

一 安装mysql服务 1.1 拉取镜像 1.拉取&#xff1a; docker pull mysql:5.7.29 2.查看镜像&#xff1a; docker images 1.2 在宿主机创建文件存储mysql 1.创建映射目录&#xff1a;mysql-c5 在/root/export/dockertest 目录下&#xff0c;mkdir -p mysql-c5 &#…

百度网盘群组目录导出

下载油猴插件&#xff0c;添加脚本&#xff1a;https://github.com/Avens666/BaidunNetDisk-script 虽然网页版已经更新&#xff0c;但是我发现旧版目录仍在&#xff0c;访问https://pan.baidu.com/mbox/homepage 选择导出目录即可&#xff0c;要等一会&#xff0c;页面可能会…

医疗器械市场行情有目共睹

针对大型医用设备配置&#xff0c;官方的态度正由“保守”转为“鼓励”&#xff0c;这一变化对于市场的重要性不言而喻。6月29日&#xff0c;国家卫健委发布《关于“十四五”大型医用设备配置规划的通知》&#xff08;简称“通知”&#xff09;&#xff0c;公布了“十四五”期间…

计算机网络课程 day1 基本概念-交换机-路由器 计算机网络的参考模型

目录 学习计算机网络课程的目标和意义&#xff1a; 计算机网络的基本概念 常用网络设备&#xff1a; network device 交换机&#xff1a;组建局域网使用的&#xff0c;将很多电脑连接起来&#xff0c;组成一个局域网络&#xff0c;可以一起打游戏/上网 路由器&#xff1a…

计算机组成原理复习总结

文章目录 第一章&#xff1a;计算机系统概述1.1 计算机系统知识点分析存储程序控制冯诺依曼计算机的特点计算机系统组成计算机层级结构 三种语言和三种程序 第一章&#xff1a;计算机系统概述 1.1 计算机系统 知识点分析 存储程序控制 1945年由美籍匈牙利数学家冯诺伊曼提出…

大屏项目也不难

项目环境搭建 使用create-vue初始化项目 npm init vuelatest准备utils模块 业务背景&#xff1a;大屏项目属于后台项目的一个子项目&#xff0c;用户的token是共享的 后台项目 - token - cookie 大屏项目要以同样的方式把token获取到&#xff0c;然后拼接到axios的请求头中…

mac 的vue项目新建并启动访问

mac 安装、配置vue开发环境&新建vue项目并启动访问 一、 安装hbuilderx二、 安装node.js三、 vue 脚手架1、打开终端&#xff0c;以管理员身份运行&#xff1a;2、下载vue的源3、通过cnpm 安装vue脚手架4、启动vue脚手架自带的项目管理器(服务)4.1、创建空的vue项目4.2、安…

scratch 恐龙抓恐龙

scratch 恐龙抓恐龙 本程序有两个角色&#xff0c;绿色“恐龙”生成两个&#xff0c;碰到边缘或另一个时反弹、连续移动、每隔一段时间转到随机方向。红色“恐龙”连续生成、持续移动、碰到边缘反弹、接近绿色恐龙时转向、碰到绿色恐龙时删除。 具体内容如下 绿色恐龙 红色恐…

Robot Framework工具RIDE搜索关键字

RIDE工具 选择“Tools-Search Keywords” 输入搜索内容、选择库&#xff0c;搜索关键字

ts全局类型(interface)

引入全局interface 首先先创建全局类型文件 命名以 xxx.d.ts 结尾 在项目中找到 tsconfig.json 配置文件 在 compilerOptions 下添加typeRoot属性&#xff0c;值为新创建的文件路径。 项目启动的时候就会自动读取该文件。 文件内容 declare xxx {interface xxx {...} } …

正向代理与反向代理:解密网络代理的两种不同姿态

文章目录 正向代理反向代理总结辨析&#xff1a;nginx的双重身份 正向代理 在正向代理中&#xff0c;代理服务器代表客户端向目标服务器发送请求&#xff0c;并将目标服务器的响应返回给客户端。 客户端通常需要配置使用正向代理来访问外部资源&#xff0c;而目标服务器对代理…

React03-props 和 state 详解

一、props 组件传参 1. props 基本使用 我们在使用组件时可以向组件传递数据&#xff0c;在组件内可以使用 props 对象来调用传入的数据。 function Person(props) {return <div><h3>姓名&#xff1a;{props.name}</h3><h3>年龄&#xff1a;{props.…

MySQL原理探索——25 MySQL是怎么保证高可用的

在上一篇文章中&#xff0c;介绍了 binlog 的基本内容&#xff0c;在一个主备关系中&#xff0c;每个备库接收主库的 binlog 并执行。 正常情况下&#xff0c;只要主库执行更新生成的所有 binlog&#xff0c;都可以传到备库并被正确地执行&#xff0c;备库就能达到跟主库一致的…

某嘀APP签名分析

sign解密,为header及data中的key-value拼接,并进行前后和盐值拼接,进行MD5加密; 本章记录定位的算法位置,方便后续观看; demo: # -*- coding: utf-8 -*- # @Author : Codeooo # @Time : 2022-11-23 import hashlib import random

MySQL-分库分表详解(三)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

开始编写Python程序之Python小工具:word转pdf、压缩文件、解压文件、jpg转png

1、下载Python编译器 PyCharm官网下载地址对于个人编程&#xff0c;下载免费版的Community即可 2、创建一个Python项目 Python的最佳实现是为每个项目创建virtualenv。为此&#xff0c;请展开Project Interpreter&#xff1a;New Virtualenv Environment节点&#xff0c;然后…

SSM框架模板(高配:一次性配完所有需要的配置文件)

目录 一、pom.xml文件配置&#xff08;基本不需要修改&#xff09; 二、applicationContex.xml文件的配置。&#xff08;这里只有一个地方需要修改&#xff09; 三、mybatis-config.xml文件配置&#xff08;根据需要修改&#xff09; 四、配置web.xml文件&#xff08;基本不…