检查cifar10是否已转换

2024-04-19 04:21:01 发布

您现在位置:Python中文网/ 问答频道 /正文

最近我看了一些关于机器学习的教程,现在我想测试一下我是否可以自己制作一些图像识别程序。为此,我想使用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。在

谁能告诉我我是不是犯了错?在


Tags: to数据图像convertimgdatargb像素
1条回答
网友
1楼 · 发布于 2024-04-19 04:21:01

出现奇怪颜色的图像是实际图像的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之间。给定一个不在0和1之间缩放的输入,imshow()会在内部进行一些标准化,这会导致一些图像变为负片。在

相关问题 更多 >