我在Keras训练我的顺序模型时遇到了一些问题 . 我是这个主题的新手,因此有很多以下教程和代码片段涉及...

我正在构建一个基本的CNN,以便在正射影像的基础上区分线性基础设施和地貌特征 . 由于图像非常庞大,我不得不创建一个遵循Keras文档的数据生成器 . 该模型的编译工作正常 . 但每次我运行model.fit_generator()命令时都会收到错误,我的一张训练图像丢失了(不是这样) . 我设置五个纪元开始,错误已经发生在第一个 .

我感谢任何可能出错的想法 .

我正在使用Ubuntu 16.04.5 LTS,带有iypthon笔记本,theano后端 .

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)
                                          )

输出如下:

Epoch 1/5 --------------------------------------------- ------------------------------ IOError Traceback(最近一次调用last)in()4 verbose = 1,5 validation_data = my_validation_batch_generator ,----> 6 validation_steps =(len(my_validation_batch_generator.image_filenames)// batch_size)7)/usr/local/lib/python2.7/dist-packages/keras/legacy/interfaces.pyc in wrapper(* args, ** kwargs)89 warnings.warn('更新你的'object_name'调用'90'Keras 2 API:'signature,stacklevel = 2)---> 91 return func(* args,** kwargs)92 wrapper . original_function = func 93返回fit_generator中的包装器/usr/local/lib/python2.7/dist-packages/keras/engine/training.pyc(self,generator,steps_per_epoch,epochs,verbose,callbacks,validation_data,validation_steps,class_weight,max_queue_size ,workers,use_multiprocessing,shuffle,initial_epoch)1416 use_multiprocessing = use_multiprocessing,1417 shuffle = shuffle, - > 1418 initial_epoch = initial_epoch)1419 1420 @ interfaces.legacy_generator fit_generator中的methods_support /usr/local/lib/python2.7/dist-packages/keras/engine/training_generator.pyc(model,generator,steps_per_epoch,epochs,verbose,callbacks,validation_data,validation_steps,class_weight,max_queue_size,workers,use_multiprocessing, shuffle,initial_epoch)179 batch_index = 0 180而steps_done <steps_per_epoch: - > 181 generator_output = next(output_generator)182 183如果不是hasattr(generator_output,'len'):/ usr / local / lib / python2.7 / record- packages / keras / utils / data_utils.pyc in get(self)599除了异常为e:600 self.stop() - > 601 six.reraise(* sys.exc_info())602 603 / usr / local / lib / get(self)593中的python2.7 / dist-packages / keras / utils / data_utils.pyc尝试:594而self.is_running(): - > 595 inputs = self.queue.get(block = True).get( )596 self.queue.task_done()597如果输入不是None:/usr/lib/python2.7/multiprocessing/pool.pyc in get(self,timeout)565 return self._value 566 else: - > 567 raise self._value 568 569 def _set(self,i,obj):IOErro r:[Errno 2]没有这样的文件或目录:'DJI_0168.JPG'