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]) 保存图结构和训练权重等。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容

  • 时间过得很快,转眼已经到了暑假了。 对于很多人来说,这是他们人生中最后的一个暑假,比如马剑。王程估计还靠点谱,弄个...
    南歌01阅读 497评论 0 0
  • 小长假终于结束了。这个小长假对于大多数人来说都是期盼且快乐的,终于可以抛开一切工作上的烦恼陪陪家人,约约朋友了。但...
    肖肖爱吃鱼阅读 113评论 2 1
  • 主要讲如何通过反编译来检测是否混淆成功,查看apk资源文件方法了解一下 主要使用到命令:d2j-dex2jar c...
    XBYoung阅读 3,592评论 0 0
  • ACID,是指在数据库管理系统(DBMS)中事务所具有的四个特性:原子性(Atomicity)、一致性(Consi...
    qbmiller阅读 1,943评论 1 0