yolov3代码涉及到的Keras Model fit_generator

fit_generator

使用 Python 生成器(或 Sequence 实例)逐批生成的数据,按批次训练模型。生成器与模型并行运行,以提高效率。 例如,这可以让你在 CPU 上对图像进行实时数据增强,以在 GPU 上训练模型。keras.utils.Sequence 的使用可以保证数据的顺序, 以及当 use_multiprocessing=True 时 ,保证每个输入在每个 epoch 只使用一次。

fit_generator(generator, steps_per_epoch=None, epochs=1, 
verbose=1, callbacks=None, validation_data=None, 
validation_steps=None, class_weight=None, 
max_queue_size=10, workers=1, use_multiprocessing
=False, shuffle=True, initial_epoch=0)
  • generator: 一个生成器,或者一个 Sequence (keras.utils.Sequence) 对象的实例, 以在使用多进程时避免数据的重复。 每执行一次step,就会调用一次生成器。生成器的输出应该为以下之一:
    一个 (inputs, targets) 元组
    一个 (inputs, targets, sample_weights) 元组。
    这个元组(生成器的单个输出)组成了单个的 batch。 因此,这个元组中的所有数组长度必须相同。 生成器无限地在数据集上循环,当运行到第 steps_per_epoch 时,记一个 epoch 结束。
    python生成器解释
  • steps_per_epoch: 在声明一个 epoch 完成并开始下一个 epoch 之前从 generator 产生的总步数(批次样本)。 它通常应该等于你的数据集的样本数量除以批量大小。 对于 Sequence,它是可选的:如果未指定,将使用len(generator) 作为步数。
  • epochs: 整数。训练终止时的epoch值,训练将在达到该epoch值时停止,当没有设置initial_epoch时,它就是训练的总轮数,否则训练的总轮数为epochs - inital_epoch
  • verbose: 0, 1 或 2。日志显示模式。 0 = 安静模式, 1 = 进度条, 2 = 每轮一行。
  • callbacks: keras.callbacks.Callback 实例的列表。在训练时调用的一系列回调函数。
  • validation_data: 它可以是以下之一:
    验证数据的生成器或 Sequence 实例
    一个 (inputs, targets) 元组
    一个 (inputs, targets, sample_weights) 元组。
    在每个 epoch 结束时评估损失和任何模型指标。该模型不会对此数据进行训练。
  • validation_steps: 仅当 validation_data 是一个生成器时才可用。 在停止前 generator 生成的总步数(样本批数)。 对于 Sequence,它是可选的:如果未指定,将使用 len(generator) 作为步数。
  • class_weight: 可选的将类索引(整数)映射到权重(浮点)值的字典,用于加权损失函数(仅在训练期间)。 这可以用来告诉模型「更多地关注」来自代表性不足的类的样本。
  • max_queue_size: 整数。生成器队列的最大尺寸。 如未指定,max_queue_size 将默认为 10。
  • workers: 整数。使用的最大进程数量,如果使用基于进程的多线程。 如未指定,workers 将默认为 1。如果为 0,将在主线程上执行生成器。
  • use_multiprocessing: 布尔值。如果 True,则使用基于进程的多线程。 如未指定, use_multiprocessing 将默认为 False。 请注意,由于此实现依赖于多进程,所以不应将不可传递的参数传递给生成器,因为它们不能被轻易地传递给子进程。
  • shuffle: 是否在每轮迭代之前打乱 batch 的顺序。 只能与 Sequence (keras.utils.Sequence) 实例同用。
  • initial_epoch: 开始训练的轮次(有助于恢复之前的训练)。

yolov3->train.py中的model.fit_generator

model.fit_generator(data_generator_wrapper(lines[:num_train]
, batch_size, input_shape, anchors, num_classes),
                steps_per_epoch=max(1, num_train//batch_size),
                validation_data=data_generator_wrapper(lines[num_train:], batch_size, input_shape, anchors, num_classes),
                validation_steps=max(1, num_val//batch_size),
                epochs=50,
                initial_epoch=0,
                callbacks=[logging, checkpoint]) 
  • data_generator_wrapper(lines[:num_train]
    , batch_size, input_shape, anchors, num_classes),
    使用生成器,生成图像(np.array类型,shape:batch_size4164163)数据和标签数据(len=3,shape batch_sizecellcell3*85)。每运行一次step,就会按顺序得到该批次训练数据,生成器在整个数据样本上无限循环下去,详细见data_generator。
    生成器简单解释:考虑到内存问题,数据边算边提供给模型训练。

在每次调用的时候执行,遇到yield语句返回,再次被调用时候从上次的返回yield语句处急需执行,也就是用多少,取多少,不占内存。

  • steps_per_epoch=max(1, num_train//batch_size),每次从数据集(大小num_train)取走batch_size个,需要steps_per_epoch(num_train//batch_size)次才可以取完。
  • validation_data=data_generator_wrapper(lines[num_train:], batch_size, input_shape, anchors, num_classes),同样使用生成器生成数据。验证集不会参与到训练中,只用来验证模型性能。
  • validation_steps=max(1, num_val//batch_size),
  • epochs=50。训练的轮次。50就是整个数据集被训练的次数。
  • initial_epoch=0,50就是整个数据集被训练的次数。
  • callbacks=[logging, checkpoint]) 保存图结构和训练权重等。

你可能感兴趣的:(yolov3代码涉及到的Keras Model fit_generator)