IOError: [Errno 2] Нет такого файла или каталога при обучении модели Keras - PullRequest
0 голосов
/ 29 октября 2018

У меня были некоторые проблемы с обучением моей последовательной модели в Керасе. Я новичок в этой теме, поэтому есть много следующих уроков и фрагментов кода ...

Я строил базовую CNN, чтобы различать линейную инфраструктуру и геоморфологические особенности на основе ортофотопланов. Поскольку изображения очень большие, мне пришлось создать генератор данных, который следовал бы документам Keras. Компиляция модели работает отлично. Но каждый раз, когда я запускаю команду model.fit_generator (), я получаю сообщение об ошибке, что один из моих тренировочных образов отсутствует (чего нет). Я установил пять эпох для запуска, ошибка уже происходит в первой.

Я благодарен за любые идеи, которые могли пойти не так.

Я работаю над Ubuntu 16.04.5 LTS, с ноутбуком iypthon, theano backend.

train_path = '/path/to/train/folder'
tree_top = os.listdir(train_path)
training_filenames = os.listdir('%s/%s/' %(train_path, tree_top[0])) + os.listdir('%s/%s/' %(train_path, tree_top[1]))

valid_path = '/path/to/valid/folder'
tree_top = os.listdir(valid_path)
valid_filenames = os.listdir('%s/%s/' %(valid_path, tree_top[0])) + os.listdir('%s/%s/' %(valid_path, tree_top[1]))

Генератор данных

from skimage.io import imread
from skimage.transform import resize
import numpy as np

class MY_Generator(Sequence):    # inherits from Sequence class 

    def __init__(self, image_filenames, labels, batch_size):
        self.image_filenames, self.labels = image_filenames, labels
        self.batch_size = batch_size

    def __len__(self):    # computes number of batches by dividing sample size by the batch_size
        return np.ceil(len(self.image_filenames) / float(self.batch_size))
        num_training_samples = len(self.image_filenames)
        return num_training_samples

    def __getitem__(self, idx):
        batch_x = self.image_filenames[idx * self.batch_size:(idx + 1) * self.batch_size]
        batch_y = self.labels[idx * self.batch_size:(idx + 1) * self.batch_size]

        return np.array([
            resize(imread(file_name), (200, 200))
               for file_name in batch_x]), np.array(batch_y)


my_training_batch_generator = MY_Generator(training_filenames, tree_top, batch_size)
my_validation_batch_generator = MY_Generator(valid_filenames, tree_top, batch_size)

Коннет

model = Sequential([
        Conv2D(3, (3, 3), activation='relu', input_shape=(300,400,3)),
        Flatten(),
        Dense(2, activation='softmax'),
    ])
model.compile(Adam(lr=.0001), loss='categorical_crossentropy', metrics=['accuracy'])

model.fit_generator(generator=my_training_batch_generator,
                                          steps_per_epoch=(len(my_training_batch_generator.image_filenames) // batch_size),
                                          epochs=5,
                                          verbose=1,
                                          validation_data=my_validation_batch_generator,
                                          validation_steps=(len(my_validation_batch_generator.image_filenames) // batch_size)
                                          )

Вывод выглядит следующим образом:

Эпоха 1/5

----------------------------------------------- ---------------------------- IOError Traceback (последний вызов последний) в () 4 многословный = 1, 5 validation_data = my_validation_batch_generator, ----> 6 validation_steps = (len (my_validation_batch_generator.image_filenames) // размер партии) 7)

/ usr / local / lib / python2.7 / dist-packages / keras / legacy / interfaces.pyc в обертка (* args, ** kwargs) 89 warnings.warn («Обновите ваш ' + object_name + ' звонок на +» 90 'Keras 2 API:' + подпись, уровень стека = 2) ---> 91 функция возврата (* args, ** kwargs) 92 wrapper._original_function = func 93 возвратный упаковщик

/ usr / local / lib / python2.7 / dist-packages / keras / engine / training.pyc в fit_generator (сам, генератор, steps_per_epoch, эпох, многословный, обратные вызовы, validation_data, validation_steps, class_weight, max_queue_size, worker, use_multiprocessing, shuffle, initial_epoch) 1416 use_multiprocessing = use_multiprocessing, 1417
перетасовать = перетасовать, -> 1418 initial_epoch = initial_epoch) 1419 1420 @ interfaces.legacy_generator_methods_support

/ USR / местные / Библиотека / python2.7 / Расс-пакеты / keras / двигатель / training_generator.pyc в fit_generator (модель, генератор, steps_per_epoch, эпох, многословный, обратные вызовы, validation_data, validation_steps, class_weight, max_queue_size, worker, use_multiprocessing, shuffle, initial_epoch) 179 batch_index = 0 180 while steps_done 181 generator_output = next (output_generator) 182 183, если не hasattr (generator_output, ' len '):

/ usr / local / lib / python2.7 / dist-packages / keras / utils / data_utils.pyc в получить (само) 599 за исключением исключения как e: 600 self.stop () -> 601 six.reraise (* sys.exc_info ()) 602 603

/ usr / local / lib / python2.7 / dist-packages / keras / utils / data_utils.pyc в получить (само) 593 попробуй: 594 пока self.is_running (): -> 595 входных данных = self.queue.get (block = True) .get () 596 self.queue.task_done () 597, если входы не None:

/ usr / lib / python2.7 / multiprocessing / pool.pyc в get (self, timeout) 565 вернуть self._value 566 еще: -> 567 поднять self._value 568 569 def _set (self, i, obj):

IOError: [Errno 2] Нет такого файла или каталога: 'DJI_0168.JPG'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...