我想创建一个与cifar-10数据集具有相同格式的数据集,以便与Tensorflow一起使用。它应该有图像和标签。我希望能够获得cifar-10代码,但不同的图像和标签,并运行该代码。
发布于 2016-01-27 18:06:49
首先,我们需要了解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文件中。
发布于 2016-06-15 05:18:40
我没有找到任何答案来做我想做的事情,我做了我自己的解决方案。可以在我的github上找到:https://github.com/jdeepee/machine_learning/tree/master
此脚本将图像的数量转换为训练和测试数据,其中数组的形状与cifar10数据集相同。
代码是注释过的,所以应该很容易理解。我要指出的是,它遍历了一个主目录,其中包含多个包含图像的文件夹。
发布于 2016-06-03 21:01:27
对于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)
https://stackoverflow.com/questions/35032675
复制相似问题