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

时间:2016-01-27 08:53:54

标签: machine-learning tensorflow

我想创建一个数据集,其格式与要与Tensorflow一起使用的cifar-10数据集相同。它应该有图像和标签。基本上,我希望能够采用cifar-10代码,但不同的图像和标签,并运行该代码。我还没有找到任何有关如何在线进行此操作的信息,对机器学习来说还是全新的。

4 个答案:

答案 0 :(得分:21)

我已经在一些自己的数据集上成功运行了CIFAR10代码。我相信我应该能给你一个好的答案。

在我们这样做之前,我们需要了解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 Image
import numpy as np

im = 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中使用的字节文件。对于多个图像,只需保持连接数组,如上面的格式所述。要检查您的格式是否正确,特别是对于Asker的用例,您应该获得427 * 427 * 3 + 1 = 546988字节的文件大小。假设您的图片是RGB,值范围为0-255。验证完毕后,您将全部设置为在TensorFlow中运行。使用TensorBoard可能会想象一个图像,只是为了保证正确性。

编辑2:

根据Asker在评论中提出的问题,

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文件中。

答案 1 :(得分:2)

我没有找到任何答案来做我想做的事情我自己做出了解决方案。它可以在我的github上找到:https://github.com/jdeepee/machine_learning/tree/master

此脚本将图像数量转换为训练和测试数据,其中数组与cifar10数据集的形状相同。

代码已注释,因此应该很容易遵循。我应该注意它遍历包含多个包含图像的文件夹的主目录。

答案 2 :(得分:1)

用于SVHN数据集 你可以尝试这样做多个输入图像:

import numpy as np
import scipy.io 

mat = scipy.io.loadmat('train_32x32.mat')
data = mat['X']
label = mat['y']

R_data = data[:,:,0,:]
G_data = data[:,:,1,:]
B_data = data[:,:,2,:]

R_data = np.transpose(R_data, (2,0,1))
G_data = np.transpose(G_data, (2,0,1))
B_data = np.transpose(B_data, (2,0,1))

R_data = np.reshape(R_data,(73257,32*32))
G_data = np.reshape(G_data,(73257,32*32))
B_data = np.reshape(B_data,(73257,32*32))

outdata = np.concatenate((label,R_data,G_data,B_data), axis = 1)
step = 10000
for i in range(1,6):
    temp = outdata[i*step:(i+1)*step,:]
    temp.tofile('SVHN_train_data_batch%d.bin' % i)
    print('save data %d' % i)

答案 3 :(得分:1)

如果您已经使用CIFAR-10数据集对模型进行了训练,则可以跟踪this研究论文以基于训练后的模型来生成数据