笔记2:cifar10数据集获取及pytorch批量处理

(1)cifar10数据集预处理

CIFAR-10是一个广泛使用的图像数据集,它由10个类别的共60000张32x32彩色图像组成,每个类别有6000张图像。
CIFAR-10官网
以下为CIFAR-10数据集data_batch_*表示训练集数据,test_batch表示测试集数据
在这里插入图片描述
预处理结果(将CIFAR-10保存为图片格式)
在这里插入图片描述

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
@author: LIFEI
@time: 2024/5/8 15:00 
@file: 加载cifar10数据.py
@project: 深度学习(4):深度神经网络(DNN)
@describe: TEXT
@# ------------------------------------------(one)--------------------------------------
@# ------------------------------------------(two)--------------------------------------
"""
import glob
import pickle
import numpy as np
import cv2 as
import os
#%% md
cifar10官网处理函数:
#%%
def unpickle(file):
    with open(file, 'rb') as fo:
        dict = pickle.load(fo, encoding='bytes')
    return dict
#%% md
利用上面的函数进行读取数据:
#%%
label = ["airplane","automobile", "bird","cat", 'deer',"dog","frog","horse","ship","truck"]  #标签矩阵
filepath = glob.glob("../../test_doucments/cifar-10-batches-py/data_batch_*") # 获取当前文件的路径,返回路径矩阵,获取test数据集时将data_batch——*改为test_batch*
write_path =["./train","./test"] #
print(filepath)
for file in filepath:
    if not file:
        print("空集出错")
    else:
        # print(file)
        data_dic = unpickle(file) # 将二进制表示形式转换回 Python 对象的反序列化过程,结果为字节型数据
        # print(data_dic.keys()) #此处的keys主要有b"data",b"labels",b"filenames"
        index = 0
        for im_data in data_dic[b"data"]:  # 遍历影像矩阵数据
            im_label = data_dic[b"labels"][index] # 赋值标签数据
            im_filename = data_dic[b"filenames"][index] # 赋值影像名字
            index +=1
            # print(f"图像的文件名为:{im_filename}\n",f"图像的所属标签为:{im_label}\n",f"图像的矩阵数据为:{im_data}\n")

            #开始存放数据
            im_label_name = label[im_label]
            im_data_data = np.reshape(im_data,(3,32,32)) # 将影像矩阵数据转换为图像形式

            # 由于需要opencv进行写出图像,因此需要转化通道
            im_data_data = np.transpose(im_data_data,(1,2,0))
            imgname = f"当前图像名称{im_label},所属标签{im_label_name}"
            cv.imshow(str( im_label_name),cv.resize(im_data_data,(500,500))) # 将显示时的图像变大,图像数据本身大小不变
            cv.waitKey(0)
            cv.destroyAllWindows()

            #创建文件夹
            for path in write_path:
                if not os.path.exists("{}/{}".format(path,im_label_name)): #查看存储路径中的文件夹是否存在
                    os.mkdir("{}/{}".format(path,im_label_name)) # 没有就创建文件
                else:
                    break
            cv.imwrite("{}/{}/{}".format(write_path[0],im_label_name,str(im_filename,'utf-8')),im_data_data)
            # #write_path[1]写出测试数据的时候将write_path[0]改为write_path[1]
#%% md
将cifar10数据转为图片格式并保存

(2)利用pytorch将图像转为张量数据

或是批量读取训练集和测试集数据
在这里插入图片描述

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
@author: LIFEI
@time: 2024/5/8 15:00 
@file: 加载cifar10数据.py
@project: 深度学习(4):深度神经网络(DNN)
@describe: TEXT
@# ------------------------------------------(one)--------------------------------------
@# ------------------------------------------(two)--------------------------------------
"""
# 导入库
import glob
from torchvision import transforms
from torch.utils.data import Dataset,DataLoader
import cv2 as cv
# DataLoader参考网址https://blog.csdn.net/sazass/article/details/116641511

from PIL import Image

label_name = ["airplane","automobile", "bird","cat", 'deer',"dog","frog","horse","ship","truck"]
label_list = {} # 创建一个字典用于存储标签和下标
index = 0
for name in label_name:  # 也可以采用for index,name in enumerate(label_name)
    label_list[name] = index # 字典的常规赋值操作
    index += 1

def default_loder(path):
    # return Image.open(path).convert("RGB") # 也可采用opencv读取
    img = cv.imread(path)
    return cv.cvtColor(img,cv.COLOR_BGR2RGB)


# 定义训练集数据的增强   下面的Compose表示拼接需要增强的操作
train_transform = transforms.Compose([
    transforms.RandomCrop(28,28), #进行随机裁剪为28*28大小
    transforms.RandomHorizontalFlip(), #垂直方向翻转
    transforms.RandomVerticalFlip(), #水平方向的翻转
    transforms.RandomRotation(90), #随机旋转90度
    transforms.RandomGrayscale(0.1), #灰度转化
    transforms.ColorJitter(0.3,0.3,0.3,0.3), #随机颜色增强
    transforms.ToTensor() #将数据转化为张量数据
])

# 定义pytorh的dataset类
class MyData(Dataset):
    def __init__(self,im_list,
                 transform = None,
                 loder = default_loder):     #初始化函数
        super(MyData,self).__init__() #初始化这个类

        # 获取图片的路径以及标签号
        images = []
        for item_data in im_list:
            # 注意下面这一步,split("\\")根据不同的操作系统会不相同,有的是"/"
            img_label_name = item_data.split("\\")[-2] #通过遍历每一个路径进行获取当前图片的文字标签
            images.append([item_data,label_list[img_label_name]])

        self.images = images
        self.tranform =transform
        self.loder = loder

    def __getitem__(self, index_num): # 此处的index_num是在训练的时候反复传进来的值
        img_path , img_label = self.images[index_num] #这里的
        img_data = self.loder(img_path)  # 这里用到了self.loder(path)==>default_loder(path)外置函数

        if self.tranform is not None: # 判断数据是否增强
            img_data = self.tranform(img_data)
        return img_data,img_label

    def __len__(self):
         return len(self.images)

train_list = glob.glob("./train/*/*.png") # glob.glob 获取改路径下的所有文件路径并返回为列表
test_list = glob.glob("./test/*/*.png")

train_dataset = MyData(train_list,transform = train_transform)
test_dataset = MyData(test_list,transform = transforms.ToTensor()) #测试集无需进行图像增强操作,直接转为张量

train_data_loder = DataLoader(dataset =train_dataset,
                              batch_size=6,
                              shuffle=True,
                              num_workers=4)
test_data_loder = DataLoader(dataset =test_dataset,
                              batch_size=6,
                              shuffle=False,
                              num_workers=4)
print(f"训练集的大小:{len(train_dataset)}")
print(f"测试集的大小:{len(test_dataset)}")

注:以上代码非原创,仅供个人记录学习笔记,若有侵权,请我联系删除

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

股票退市的最新要求!

五一假期一过,多家上市公司都进入退市名单,不知道有没有您的股票?很多朋友直呼现在炒股越来越难,一步小心就买到了退市个股,加上新改革,我们一起来结合退市政策来了解下怎么挑选个股? 2024年最新…

论文查重率高,有什么办法降重吗?

现在大部分学校已经进入到论文查重降重的阶段了。如果查重率居高不下,延毕的威胁可能就在眼前。对于即将告别校园的学子们,这无疑是个噩梦。四年磨一剑,谁也不想在最后关头功亏一篑。 查重率过高,无非以下两种原因。要么是作为“…

《手把手教你怎么上手做一个小程序》

准备工作: 硬件准备: 装有微信的手机一台。 账号注册: 进入https://mp.weixin.qq.com/cgi-bin/registermidpage?actionindex&langzh_CN&token注册一个微信小程序账号。 然后输入邮箱注册账号。一个邮箱只能注册一个微信公众平台…

在WPS表格(Excel)中,每10行增加一个特定的值

注:如下为WPS表格操作演示 例如1-15的数值是1,16-30就变为2,31-45就变为3,类推! 1、在B1单元格输入一个起始值,B2单元格输入公式IF(MOD(ROW(),15)0,B11,B1) 然后鼠标放到B2单元格右下角小点处&…

案例分享:BACnet转Modbus提升暖通系统互操作性

现代智能建筑中系统的集成与互操作性是决定其智能化程度的关键因素。随着技术的发展,不同标准下的设备共存成为常态,而BACnet与Modbus作为楼宇自动化领域广泛采用的通讯协议,它们之间的无缝对接显得尤为重要。本文将通过一个实际案例&#xf…

一次有关 DNS 解析导致 APP 慢的问题探究

一、业务背景 HTTTPDNS AWS Router53 APP 使用 HTTPDNS, 为解决 DNS 解析生效慢, DNS 劫持等问题。 我们 IOS 和安卓都是使用了 HTTPDNS。 域名托管在 AWS Router53。 域名有多个解析(基于延迟),为了解决就近接入。 示例配置 ai.baidu.c…

考情分析 | 2025年西北工业大学计算机考研考情分析!

西北工业简称西工大(英文缩写NPU),大学坐落于古都西安,是我国唯一一所以同时发展航空、航天、航海工程教育和科学研究为特色,以工理为主,管、文、经、法协调发展的研究型、多科性和开放式的科学技术大学。十…

《Python编程从入门到实践》day22

# 昨日知识点回顾 方法重构、驾驶飞船左右移动、全屏显示 飞船不移动解决,问题出在移动变量x更新 # Ship.pysnipdef update(self):"""根据移动标志调整飞船的位置"""# 更新飞船而不是rect对象的x值# 如果飞船右移的标志和飞船外接…

嵌入式引脚工作模式

一.引脚工作模式的基本概念 引脚的工作模式通常包括输入模式、输出模式和双向模式: 输入模式:引脚设置为输入模式时,可以接收外部信号或触发器的信号。这种模式通常用于读取传感器数据、接收外部设备的信号等。 输出模式:引脚设…

链表的阶乘

int FactorialSum(List L) {int res 0; // 结果初始化struct Node* x L; // 从链表的头节点开始// 遍历链表中的每一个节点while (x ! NULL) {int data x->Data; // 当前节点的值int y 1; // 用于计算当前节点值的阶乘// 计算当前节点值的阶乘for (int j 1; j < dat…

ROS 2边学边练(44)-- 从头开始构建一个视觉机器人模型

前言 从此篇开始我们就开始接触URDF(Unified Robot Description Format&#xff0c;统一机器人描述格式)&#xff0c;并利用其语法格式搭建我们自己的机器人模型。 动动手 开始之前我们需要确认是否安装joint_state_publisher功能包&#xff0c;如果有安装过二进制版本的urdf_…

单位档案寄存该怎么处理才好

处理单位档案寄存的方式可以根据实际情况来确定&#xff0c;以下是一些常见的处理方式&#xff1a; 1. 数字化存档&#xff1a;将单位档案进行数字化处理&#xff0c;通过扫描或拍照将文件转化为电子格式。这样可以方便查找和管理&#xff0c;减少纸质文件的存储量&#xff0c;…

iOS ------ 内存五大分区

1&#xff0c;内存的概念&#xff1a; 虚拟内存&#xff08;Virtual Memory&#xff09;&#xff1a;虚拟内存是操作系统提供的一种机制&#xff0c;它使得应用程序能够访问超出物理内存限制的内存空间。虚拟内存将应用程序的内存地址空间分割成固定大小的页面&#xff08;Pag…

elementui+vue通过下拉框多选字段进行搜索模糊匹配

从字典中选择的值为["01","03"],在最开始的时候进行的处理是类似于表单提交的时候将json对象转换成了String类型 nature:["01","03"] this.queryParams.nature JSON.stringify(this.queryParams.nature); mapper层 <if test&quo…

PHP单独项目启动演示

文章目录 phpstudy得到文件打开phpStudy.exe运行项目 phpstudy 得到文件 一般我们会得到这么一个项目文件&#xff0c;如果外层有“中文路径”&#xff0c;请剪切此内容作为项目根目录即可 打开phpStudy.exe 因为我又正常的编程环境和mysql&#xff0c;所以这里是正常的&a…

开机弹窗找不到OpenCL.dll是怎么回事,哪种修复方法更推荐

当用户在操作电脑过程中遇到系统提示“OpenCL.dll丢失”时&#xff0c;这究竟是怎么一回事呢&#xff1f;OpenCL.dll&#xff0c;作为Open Computing Language&#xff08;开放计算语言&#xff09;的重要动态链接库文件&#xff0c;它在图形处理器&#xff08;GPU&#xff09;…

企业内部适用的五大知识库工具测评推荐

随着企业规模的不断扩大和业务复杂性的增加&#xff0c;要想更高效地进行企业管理就不得不使用知识库管理工具。本文将对五款企业内部适用的知识库工具进行测评推荐&#xff0c;帮助企业选择出更适合自己的知识库管理工具。 一、Helplook AI知识库 Helplook AI知识库是一款搭建…

PotPlayer v1.7.22218 全格式影音播放器,无广绿色版!

软件介绍 PotPlayer是一款多功能且免费的媒体播放软件&#xff0c;兼容多种音频和视频格式。提供了丰富的功能性以及个性化设置&#xff0c;以迎合不同用户的需求。友好的用户界面&#xff0c;允许用户自定义皮肤和快捷键&#xff0c;提升了操作的便利性。 此外&#xff0c;Po…

JavaScript快速入门系列-1(JavaScript简介)

第一章:JavaScript简介 1. JavaScript简介1.1 什么是JavaScript1.2 JavaScript的历史与应用1.3 环境搭建:浏览器与Node.js2. JavaScript语言基础2.1 变量声明:let, const, var2.2 数据类型:字符串、数字、布尔值、对象、数组、null与undefined2.3 运算符:算术、比较、逻辑…

微信云小程序快速上手云数据库+云函数+云存储的操作

&#x1f680; 作者 &#xff1a;“二当家-小D” &#x1f680; 博主简介&#xff1a;⭐前荔枝FM架构师、阿里资深工程师||曾任职于阿里巴巴担任多个项目负责人&#xff0c;8年开发架构经验&#xff0c;精通java,擅长分布式高并发架构,自动化压力测试&#xff0c;微服务容器化k…
最新文章