如何创建类似于CIFAR-10的数据集

我想创建一个与CIFAR-10数据集格式相同的数据集,以便在TensorFlow中使用。它应该包含图像和标签。我希望能够使用CIFAR-10的代码,但使用不同的图像和标签,并运行该代码。


回答:

首先,我们需要了解CIFAR10数据集的格式。如果我们参考:https://www.cs.toronto.edu/~kriz/cifar.html,特别是二进制版本部分,我们可以看到:

第一个字节是第一张图像的标签,是0-9之间的数字。接下来的3072个字节是图像的像素值。前1024个字节是红色通道的值,接下来的1024个是绿色,最后1024个是蓝色。值以行主序存储,因此前32个字节是图像第一行的红色通道值。

直观上,我们需要以这种格式存储数据。作为一种基线实验,你可以先获取与CIFAR10相同尺寸和相同类别数量的图像,并将它们存储在这个格式中。这意味着你的图像应该具有32x32x3的尺寸,并且有10个类别。如果你能成功运行这个实验,那么你可以进一步处理单通道、不同尺寸的输入和不同类别的情况。这样做意味着你需要更改代码中其他部分的许多变量。你需要逐步解决这些问题。

我正在开发一个通用模块。我的代码在https://github.com/jkschin/svhn。如果你参考svhn_flags.py代码,你会看到许多可以更改以适应你需求的标志。我承认现在看起来有点神秘,因为我还没有清理代码使其可读,但它是有效的。如果你愿意花一些时间粗略地看一下,你会发现一些东西。

这可能是你在CIFAR10上运行自己的数据集的最简单方法。当然,你也可以复制神经网络定义并实现自己的读取器、输入格式、批处理等,但如果你想快速启动并运行,只需调整你的输入以适应CIFAR10即可。

编辑:

一些非常基本的代码,希望能有所帮助。

from PIL import Imageimport numpy as npim = Image.open('images.jpeg')im = (np.array(im))r = im[:,:,0].flatten()g = im[:,:,1].flatten()b = im[:,:,2].flatten()label = [1]out = np.array(list(label) + list(r) + list(g) + list(b),np.uint8)out.tofile("out.bin")

这将把图像转换为一个字节文件,准备在CIFAR10中使用。对于多张图像,只需按照上述格式继续连接数组。要检查你的格式是否正确,特别是对于提问者的用例,你应该得到一个文件大小为427*427*3 + 1 = 546988字节。假设你的图片是RGB格式且值范围在0-255之间。一旦你验证了这一点,你就可以在TensorFlow中运行了。可以使用TensorBoard来可视化一张图像,以确保正确性。

编辑2:

根据提问者在评论中的问题,

if not eval_data:    filenames = [os.path.join(data_dir, 'data_batch_%d.bin' % i)                 for i in xrange(1, 6)]

如果你真的想让它按原样工作,你需要研究CIFAR10代码的函数调用。在cifar10_input中,批次是硬编码的。所以你需要编辑这行代码以适应bin文件的名称。或者,只需将你的图像均匀分布到6个bin文件中即可。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注