2016-11-29 1 views
1

У меня есть папка с изображениями jpg с разным размером, из которых я хотел бы сгенерировать поезд и тестовый набор через sklearn.model_selection .train_test_split().
Это мой код до сих пор:Загрузка jpg разных размеров в numpy.array - ValueError: найденные входные переменные с непоследовательным числом выборок

helper = list() 
y = list() 

for path, subdirs, files in os.walk(inputDir): 
    for s in subdirs: 
     y.append(s) 
    for f in files: 
     img_path = os.path.join(path,f) 
     pixels = Image.open(img_path).getdata() 
     helper.append(pixels) 

x = np.asarray(helper) 

x_train, x_test, y_train, y_test = train_test_split(x,y) #error occurs here 

Я получаю следующее сообщение об ошибке:

File "getTrainTestSet.py", line 57, in getTrainTestSet x_train, x_test, y_train, y_test = train_test_split(x,y)
File "/usr/local/lib/python2.7/dist-packages/sklearn/model_selection/_split.py", line 1689, in train_test_split arrays = indexable(*arrays)
File "/usr/local/lib/python2.7/dist-packages/sklearn/utils/validation.py", line 206, in indexable check_consistent_length(*result)
File "/usr/local/lib/python2.7/dist-packages/sklearn/utils/validation.py", line 181, in check_consistent_length " samples: %r" % [int(l) for l in lengths])
ValueError: Found input variables with inconsistent numbers of samples: [120, 0]

Пожалуйста, помогите мне исправить это.

Заранее благодарен!


EDIT: Я понял, как это сделать так, чтобы не портил с функцией train_test_split():

y = list() 
helpers = list() 

for path, subdirs, files in os.walk(inputDir): 
    for s in subdirs: 
     files = glob.glob(inputDir+ s + '/*.jpg') 
     helpers.append(np.array([np.array(Image.open(f)) for f in files])) 
     y.append(s) 

x = np.array([np.array(h) for h in helpers]) 

x_train, x_test, y_train, y_test = train_test_split(x,y) 

Я считаю, что проблема в том, что len(y) и x.shape[0] должны быть равны , Мой последний x имеет форму (4), поскольку у меня есть 4 подкаталога с файлами изображений в целом.

Спасибо всем за ваш вклад!

+0

Какая форма и тип для 'x'. Я подозреваю, что это массив объектов 1d. Изучите «sklearn», чтобы узнать, есть ли способ обработки изображений различного размера и обучения. Я уверен, что обычная обработка ожидает согласованного размера (и многомерных массивов). – hpaulj

+0

x.shape == (120,) и x.dtype == object. Если я использую np.atleast_2d (x) в качестве предложенного @Def_Os, форма равна (1,120), а dtype остается объектом. Но даже с двумерным массивом я все равно получаю ValueError (см. Ниже). Я ищу в Интернете решение, но, к сожалению, пока не нашел способа обработки изображений разного размера. – hsvar

+0

Проверьте этот код на набор изображений, имеющих все одинаковые размеры. – hpaulj

ответ

0

x должен быть 2-мерным массивом размера [no_of_samples, no_of_features]. Сделайте это:

x = np.atleast_2d(x).T 
+0

Я пробовал это, но я все равно получаю переменные ValueError: Found с непоследовательными числами образцов: [1, 0] – hsvar

+0

Попробуйте переставить его: 'x = np.atleast_2d (x) .T' –

+0

Это тоже не сработало. Спасибо за ваш вклад! Я понял это сейчас. Я редактирую свой вопрос с помощью решения, которое сработало для меня. – hsvar

Смежные вопросы

 Смежные вопросы