У меня есть папка с изображениями 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 подкаталога с файлами изображений в целом.
Спасибо всем за ваш вклад!
Какая форма и тип для 'x'. Я подозреваю, что это массив объектов 1d. Изучите «sklearn», чтобы узнать, есть ли способ обработки изображений различного размера и обучения. Я уверен, что обычная обработка ожидает согласованного размера (и многомерных массивов). – hpaulj
x.shape == (120,) и x.dtype == object. Если я использую np.atleast_2d (x) в качестве предложенного @Def_Os, форма равна (1,120), а dtype остается объектом. Но даже с двумерным массивом я все равно получаю ValueError (см. Ниже). Я ищу в Интернете решение, но, к сожалению, пока не нашел способа обработки изображений разного размера. – hsvar
Проверьте этот код на набор изображений, имеющих все одинаковые размеры. – hpaulj