卷积神经网络处理Cifar-10分类数据集

Cifar-10分类数据集

Cifar-10分类数据集简介

  • CIFAR-10数据集由10个类的60000个32x32彩色图像组成,每个类有6000个图像。有50000个训练图像和10000个测试图像。
  • 数据集分为五个训练批次和一个测试批次,每个批次有10000个图像。测试批次包含来自每个类别的恰好1000个随机选择的图像。

  • 数据
    • 一个10000x3072二维uint8类型的numpy数组。
    • 数组的每一行存储一张32x32彩色图像,即每一行存储32323=3072个数字信息。其中,前1024个元素为红色通道,随后1024个元素为绿色通道,最后1024个元素为蓝色通道。
    • 图像以行优先的顺序存储,即数组的前32个元素对应图像第一行像素红色通道。
  • 标签
    • 取值范围为0-9的10000个数字组成的列表。
    • 索引i处的数字表示数据数组中第i行对应图像的标签。
  • batches.meta文件
    • python字典对象
    • label_names:包含10个元素的列表,为上述标签数组中的数字赋予名称。
      例如,label_names[0]=“飞机”,label_names[1]=“汽车”等

代码

%xmode Verbose
%pdb on
Exception reporting mode: Verbose
Automatic pdb calling has been turned ON
import matplotlib.pyplot as plt
import numpy as np
import os
import pickle
import tensorflow as tf

1. 定义Cifar-10类

class CifarLoader(object):
    
    def __init__(self, source_files):
        self._source = source_files
        self._i = 0
        self.images = None
        self.labels = None
        
    def load(self):
        data = [unpickle(f) for f in self._source]
        images = np.vstack([d[b"data"] for d in data])
        n = len(images)
        self.images = images.reshape(n, 3, 32, 32).transpose(0, 2, 3, 1).astype(float) / 255
        self.labels = one_hot(np.hstack([d[b"labels"] for d in data]), 10)
        return self
    
    def next_batch(self, batch_size):
        x, y = self.images[self._i : self._i + batch_size], self.labels[self._i : self._i + batch_size]
        self._i = (self._i + batch_size) % len(self.images)
        return x, y
    

2. 定义函数

DATA_PATH = "../dataset/cifar-10-batches-py/"

def unpickle(file):
    with open(os.path.join(DATA_PATH, file), "rb") as fo:
        dict = pickle.load(fo, encoding="bytes")
    return dict

def one_hot(vec, vals=10):
    n = len(vec)
    out = np.zeros((n, vals))
    out[range(n), vec] = 1
    return out

3. 定义数据管理器类

class CifarDataManager(object):
    
    def __init__(self):
        self.train = CifarLoader(["data_batch_{}".format(i) for i in range(1, 6)]).load()
        self.test = CifarLoader(["test_batch"]).load()
        

4. 显示Cifar-10数据集图片

def display_cifar(images, size):
    n = len(images)
    plt.figure()
    plt.gca().set_axis_off()
    im = np.vstack([np.hstack([images[np.random.choice(n)] for i in range(size)]) for i in range(size)])
    plt.imshow(im)
    plt.show()
    
4.1 Cifar-10数据集显示
cifar = CifarDataManager()
print("Number of train images: {}".format(len(cifar.train.images)))
  • 10
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Cifar-10数据集是一个用于图像识别的数据集,包含了10种不同别的图像,每个别有6000张32*32像素的彩色图像。在这个任务中,我们将使用卷积神经网络对这些图像进行分类数据集分析: 首先,我们可以使用Python中的numpy和matplotlib库来加载和可视化数据集。下面是一个简单的代码片段: ```python import numpy as np import matplotlib.pyplot as plt import pickle # 加载数据集 with open('cifar-10-batches-py/data_batch_1', 'rb') as f: data = pickle.load(f, encoding='bytes') # 解析数据 X = data[b'data'] Y = data[b'labels'] labels = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck'] # 可视化数据 fig, axes = plt.subplots(5, 10, figsize=(10, 5)) for i, ax in enumerate(axes.flat): ax.imshow(X[i].reshape(3, 32, 32).transpose([1, 2, 0])) ax.set_xticks([]) ax.set_yticks([]) ax.set_title(labels[Y[i]]) plt.show() ``` 这段代码将加载数据集中的第一个批次,并将前50个图像可视化。可以看到,这些图像包含了不同的物体,例如汽车、狗和鸟等。 数据集处理: 在进行训练之前,我们需要对数据集进行一些预处理。首先,我们需要将像素值归一化到0到1之间。其次,我们需要将图像从32*32*3的形状转换为合适的形状,以便它们可以被输入到卷积神经网络中。 ```python # 数据预处理 X = X.astype('float32') / 255.0 X = X.reshape(-1, 3, 32, 32).transpose([0, 2, 3, 1]) Y = np.array(Y) ``` 这段代码将像素值归一化到0到1之间,并将图像从32*32*3的形状转换为32*32*3的形状。现在,我们已经完成了数据集的预处理,可以开始构建卷积神经网络模型进行训练。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值