如何使用多个图像制作类似于CIFAR10的数据集

时间:2016-03-11 08:26:06

标签: python tensorflow

我尝试制作一个类似于CIFAR10的数据集。我找到了这个教程: How to create dataset similar to cifar-10

我已经可以创建一个带有1个图像的数据集,但是当我尝试使用多个图像时,我收到了这个错误:

tensorflow.python.framework.errors.InvalidArgumentError: Indices are not valid: not lexicographically sorted or containing repeats.

任何人都可以帮我解决这个问题吗?

这是我的代码:

from PIL import Image
import numpy as np

out =np.empty([20,7501])
    for j in xrange(0, 10):
        im = Image.open('%d_receipt.jpg' % j)
        im = (np.array(im))
        r = im[:,:,0].flatten()
        g = im[:,:,1].flatten()
        b = im[:,:,2].flatten()
        label = [0]
        out[j] = np.array(list(label) + list(r) + list(g) + list(b),np.uint8)  


    for i in xrange(0, 10):
        im = Image.open('%d_news.jpg' % i)
        im = (np.array(im))
        r = im[:,:,0].flatten()
        g = im[:,:,1].flatten()
        b = im[:,:,2].flatten()
        label = [1]
        j = i + 10
        out[j] = np.array(list(label) + list(r) + list(g) + list(b),np.uint8)


out.tofile("data_batch.bin")

3 个答案:

答案 0 :(得分:0)

我这样做:

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)

然后,直接将它直接放在Cifar10 tensorflow示例的列车代码中。

答案 1 :(得分:0)

我也试着按照你在问题中发布的教程,但我无法让它工作,所以我自己做了解决方案。它可以在我的github上找到:https://github.com/jdeepee/machine_learning/tree/master

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

答案 2 :(得分:0)

下面的代码片段是我为使CIFAR-10适应GTSRB所做的工作。更多细节在这里。 https://github.com/hashkanna/traffic-signs/blob/master/Traffic_Signs_Recognition_binFiles.ipynb

//get tbfabricante 
EmpApi.gettbfabricante = function () {
    return $http.get(urlBase + '/tbfabricante')
}