检查cifar10是否转换得很好

问题描述 投票:0回答:1

最近我接受了一些关于机器学习的教程,现在我想测试一下我是否可以自己制作一些图像识别程序。为此我想使用CIFAR 10数据集,但我认为我在转换数据集时遇到了一个小问题。

对于谁不熟悉这个集合:数据集来自n行和3072列的列表,其中前1024列表示红色值,第二列1024表示绿色值,最后一列是蓝色值。每行是单个图像(大小为32x32),像素行彼此堆叠(前32个值是最顶部像素行的红色值,等等)

我想用这个数据集做的是将它转换为4D张量(有numpy),所以我可以用matplotlibs .imshow()查看图像。我制作的张量有这样的形状:(n, 32, 32, 3),所以第一个'维度'存储所有图像,第二个存储像素行,第三个存储单个像素,最后一个表示这些像素的rgb值。这是我做的功能应该这样做:

def rawToRgb(data):
    length = data.shape[0]

    # convert to flat img array with rgb pixels
    newAr = np.zeros([length, 1024, 3])
    for img in range(length):
        for pixel in range(1024):
            newAr[img, pixel, 0] = data[img, pixel]
            newAr[img, pixel, 1] = data[img, pixel+1024]
            newAr[img, pixel, 2] = data[img, pixel+2048]

    # convert to 2D img array
    newAr2D = newAr.reshape([length, 32, 32, 3])
    # plt.imshow(newAr2D[5998])
    # plt.show()
    return newAr2D

这需要一个参数(形状(n, 3072)的张量)。我已经注释了pyplot代码,因为这仅用于测试,但是在测试时,我注意到一切似乎都没问题(我可以识别图像中对象的形状,但我不确定颜色是否良好或者不是,因为我得到一些奇怪的图像以及一些非常正常的图像...这里有几个例子:purple planeblue catnormal horseblue frog

谁能告诉我是否犯了错误?

坦克提前!!

python numpy matplotlib
1个回答
2
投票

出现奇怪颜色的图像是实际图像的negative,因此您需要从255中减去每个像素值以获得真实值。如果您只想查看原始图像的外观,请使用:

from scipy.misc import imread
import matplotlib.pyplot as plt
img = imread(file_path)
plt.imshow(255 - img)
plt.show()

问题的最初原因是CIFAR-10数据以0-255的比例存储像素值,但matplotlib的imshow()方法(我假设您正在使用)期望输入介于0和1之间。给定输入不是imshow()在0和1之间缩放,在内部进行一些归一化,这会导致一些图像变为负片。

© www.soinside.com 2019 - 2024. All rights reserved.