Странная проблема с тензорным потоком: сброшенные ранги

#python #tensorflow #machine-learning #keras #computer-vision

#python #tensorflow #машинное обучение #keras #компьютерное зрение

Вопрос:

Я не уверен, что здесь происходит. Я читал об этой ошибке и интерпретирую ее как ошибку, связанную с изменением формы изображения. По какой-то причине отсутствуют последние 3 ранга. В наборе данных каждое изображение ненормализовано по ширине и высоте. Предполагается, что изображения после обработки будут квадратными, и именно здесь функция изменения размера scikit не может заполнить пробел. Вместо этого он помещает в train_X пропорционально масштабированный набор, основанный на максимальном измерении. Вот идея потока.

 def read_img(file):  
    img = skimage.io.imread(img_folder   file)
    img = skimage.transform.resize(img, (img_height, img_width), mode='reflect')

    return img[:,:,:img_channels] #the last 3 ranks meant to fill in the traceback
  

Функция read_img загружается в train_X.

 train_X = np.stack(train_['file'].apply(read_img))
  

Вот обратная трассировка.

 Traceback (most recent call last):
File "A:anoth...newmodel.py", line 196, in <module>
generator, train_X, val_X, test_X, train_y, val_y, test_y = 
prepare2train(train_, val_, test_, 'Category')
File "A:anoth...newmodel.py", line 192, in prepare2train
generator.fit(train_X,augment=True, rounds=50, seed=43)
File "A:anothAnacondalibsite-packageskeras_preprocessingimage.py", line 1347, in fit
'Got array with shape: '   str(x.shape))
ValueError: Input to `.fit()` should have rank 4. Got array with shape: (6848,)
  

Правильно ли я понимаю эту проблему? Если да, то почему train_X может сбросить последние 3 ранга? Как мне это решить?

Комментарии:

1. Выполнено. Добавлено определение.

2. Поезд.. Разбивает и балансирует набор данных. Я уже использовал этот код раньше, и он работает с файлами JPG. Я начинаю подозревать, что это связано со структурой массивов img в файлах для чтения. Код работает с файлами jpg, но png могут иметь структуру, конфликтующую с выводом, возвращаемым img для чтения файла.

Ответ №1:

img = skimage.transform.resize(img, (img_height, img_width), mode=’reflect’) по какой-то причине не изменяет размер изображений надлежащим образом. Изменение размера изображений за пределами python и отказ от использования этой строки кода решили проблему сброшенных рангов.