如何在学习CIFAR10进行图像分类出现了BUG?(语言-python)

img


出现模块识别不到的BUG,该怎样解决这个BUG。出现了很多行提示

  • 这篇文章:使用python对cifar10数据集的python读取 也许能够解决你的问题,你可以看下
  • 除此之外, 这篇博客: 数据集处理篇中的 python实现cifar10数据集的可视化 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • (1)CIFAR-10数据集介绍

    ① CIFAR-10数据集包含60000个3232的彩色图像,共有10类。有50000个训练图像和10000个测试图像。
    数据集分为5个训练块和1个测试块,每个块有10000个图像。测试块包含从每类随机选择的1000个图像。训练块以随机的顺序包含这些图像,但一些训练块可能比其它类包含更多的图像。训练块每类包含5000个图像。
    ②data——1个10000
    3072大小的uint8s数组。数组的每行存储1张32*32的图像。第1个1024包含红色通道值,下1个包含绿色,最后的1024包含蓝色。图像存储以行顺序为主,所以数组的前32列为图像第1行的红色通道值。
    labels——1个10000数的范围为0~9的列表。索引i的数值表示数组data中第i个图像的标签。
    ③数据集中包含另外1个叫batches.meta的文件。它也包含1个Python字典对象。有如下列元素:
    label_names——1个10元素的列表,给labels中的数值标签以有意义的名称。例如,label_names[0] == “airplane”, label_names[1] == “automobile”等。
    都是一些二进制文件

    # -*- coding:utf-8 -*-
    import pickle as p
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.image as plimg
    from PIL import Image
    def load_CIFAR_batch(filename):
        """ load single batch of cifar """
        with open(filename, 'rb')as f:
            datadict = p.load(f)
            X = datadict['data']
            Y = datadict['labels']
            X = X.reshape(10000, 3, 32, 32)
            Y = np.array(Y)
            return X, Y
    
    def load_CIFAR_Labels(filename):
        with open(filename, 'rb') as f:
            lines = [x for x in f.readlines()]
            print(lines)
    
    
    if __name__ == "__main__":
        load_CIFAR_Labels("/data/cifar-10-batches-py/batches.meta")
        imgX, imgY = load_CIFAR_batch("/data/cifar-10-batches-py/data_batch_1")
        print imgX.shape
        print "正在保存图片:"
        for i in xrange(imgX.shape[0]):
            imgs = imgX[i - 1]
            if i < 100:#只循环100张图片,这句注释掉可以便利出所有的图片,图片较多,可能要一定的时间
                img0 = imgs[0]
                img1 = imgs[1]
                img2 = imgs[2]
                i0 = Image.fromarray(img0)
                i1 = Image.fromarray(img1)
                i2 = Image.fromarray(img2)
                img = Image.merge("RGB",(i0,i1,i2))
                name = "img" + str(i)
                img.save("/data/images/"+name,"png")#文件夹下是RGB融合后的图像
                for j in xrange(imgs.shape[0]):
                    img = imgs[j - 1]
                    name = "img" + str(i) + str(j) + ".png"
                    print "正在保存图片" + name
                    plimg.imsave("/data/image/" + name, img)#文件夹下是RGB分离的图像
    
        print "保存完毕."