У меня были некоторые проблемы с обучением моей последовательной модели в Керасе. Я новичок в этой теме, поэтому есть много следующих уроков и фрагментов кода ...
Я строил базовую 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'