浅谈keras2 predict和fit_generator的坑


Posted in Python onJune 17, 2020

1、使用predict时,必须设置batch_size,否则效率奇低。

查看keras文档中,predict函数原型:

predict(self, x, batch_size=32, verbose=0)

说明:

只使用batch_size=32,也就是说每次将batch_size=32的数据通过PCI总线传到GPU,然后进行预测。在一些问题中,batch_size=32明显是非常小的。而通过PCI传数据是非常耗时的。

所以,使用的时候会发现预测数据时效率奇低,其原因就是batch_size太小了。

经验:

使用predict时,必须人为设置好batch_size,否则PCI总线之间的数据传输次数过多,性能会非常低下。

2、fit_generator

说明:keras 中 fit_generator参数steps_per_epoch已经改变含义了,目前的含义是一个epoch分成多少个batch_size。旧版的含义是一个epoch的样本数目。

如果说训练样本树N=1000,steps_per_epoch = 10,那么相当于一个batch_size=100,如果还是按照旧版来设置,那么相当于

batch_size = 1,会性能非常低。

经验:

必须明确fit_generator参数steps_per_epoch

补充知识:Keras:创建自己的generator(适用于model.fit_generator),解决内存问题

为什么要使用model.fit_generator?

在现实的机器学习中,训练一个model往往需要数量巨大的数据,如果使用fit进行数据训练,很有可能导致内存不够,无法进行训练。

fit_generator的定义如下:

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)

其中各项的具体解释,请参考Keras中文文档

我们重点关注的是generator参数:

generator: 一个生成器,或者一个 Sequence (keras.utils.Sequence) 对象的实例, 以在使用多进程时避免数据的重复。 生成器的输出应该为以下之一:

一个 (inputs, targets) 元组

一个 (inputs, targets, sample_weights) 元组。

那么,问题来了,如何构建这个generator呢?有以下几种办法:

自己创建一个generator生成器

自己定义一个 Sequence (keras.utils.Sequence) 对象

使用Keras自带的ImageDataGenerator和.flow/.flow_from_dataframe/.flow_from_directory来生成一个generator

1.自己创建一个generator生成器

使用Keras自带的ImageDataGenerator和.flow/.flow_from_dataframe/.flow_from_directory 灵活度不高,只有当数据集满足一定格式(例如,按照分类文件夹存放)或者具备一定条件时,使用才使用才较为方便。

此时,自己创建一个generator就很重要了,关于python的generator是什么原理,怎么使用,就不加赘述,可以查看python的基本语法。

此处,我们用yield来返回数据组,标签组,从而使fit_generator可以调用我们的generator来成批处理数据。

具体实现如下:

def myGenerator(batch_size):
    # loading data
    X_train,Y_train=load_data(...)
    
    # data processing
    # ................
    
    total_size=X_train.size
    #batch_size means how many data you want to train one step
    
    while 1:
      for i in range(total_size//batch_size):
        yield x_train[i*batch_size:(i+1)*batch_size], y[i*batch_size:(i+1)*batch_size]
  return myGenerator

接着你可以调用该生成器:

self._model.fit_generator(myGenerator(batch_size),steps_per_epoch=total_size//batch_size, epochs=epoch_num)

以上这篇浅谈keras2 predict和fit_generator的坑就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python中__str__和__repr__方法的区别
Apr 17 Python
关于Django显示时间你应该知道的一些问题
Dec 25 Python
Python Django给admin添加Action的方法实例详解
Apr 29 Python
python实现动态创建类的方法分析
Jun 25 Python
Python绘图Matplotlib之坐标轴及刻度总结
Jun 28 Python
解决python 上传图片限制格式问题
Oct 30 Python
django在保存图像的同时压缩图像示例代码详解
Feb 11 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
Feb 28 Python
使用python计算三角形的斜边例子
Apr 15 Python
python如何爬取动态网站
Sep 09 Python
Python+Xlwings 删除Excel的行和列
Dec 19 Python
pytorch训练神经网络爆内存的解决方案
May 22 Python
python能在浏览器能运行吗
Jun 17 #Python
python的pip有什么用
Jun 17 #Python
浅谈keras通过model.fit_generator训练模型(节省内存)
Jun 17 #Python
python用什么编辑器进行项目开发
Jun 17 #Python
在keras中model.fit_generator()和model.fit()的区别说明
Jun 17 #Python
python语言的优势是什么
Jun 17 #Python
python有几个版本
Jun 17 #Python
You might like
php 图像函数大举例(非原创)
2009/06/20 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
2019/12/13 PHP
laravel框架分组控制器和分组路由实现方法示例
2020/01/25 PHP
JS获取父节点方法
2009/08/20 Javascript
jQueryUI写一个调整分类的拖放效果实现代码
2012/05/10 Javascript
jQuery之自动完成组件的深入解析
2013/06/19 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
jQuery中addClass()方法用法实例
2015/01/05 Javascript
jquery实现textarea输入框限制字数的方法
2015/01/15 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
JS模仿腾讯图片站的图片翻页按钮效果完整实例
2016/06/21 Javascript
node.js学习之base64编码解码
2016/10/21 Javascript
两种简单的跨域方法(jsonp、php)
2017/01/02 Javascript
Vue精简版风格概述
2018/01/30 Javascript
vue.js与后台数据交互的实例讲解
2018/08/08 Javascript
vue-week-picker实现支持按周切换的日历
2019/06/26 Javascript
[02:31]《DAC最前线》之选手酒店现场花絮
2015/01/30 DOTA
[55:54]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python中的多行注释文档编写风格汇总
2016/06/16 Python
Django开发中复选框用法示例
2018/03/20 Python
python实现播放音频和录音功能示例代码
2018/12/30 Python
Python微医挂号网医生数据抓取
2019/01/24 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
python切割图片的示例
2020/11/12 Python
Pyqt助手安装PyQt5帮助文档过程图解
2020/11/20 Python
Html5上传图片 移动端、PC端通用代码
2016/06/08 HTML / CSS
基于MUI框架使用HTML5实现的二维码扫描功能
2018/03/01 HTML / CSS
MaBelle玛贝尔香港官网:香港钻饰连锁店
2019/09/09 全球购物
怀念母亲教学反思
2014/04/28 职场文书
经济类毕业生求职信
2014/06/26 职场文书
幼儿园大班开学寄语
2014/08/02 职场文书
给妈妈洗脚活动方案
2014/08/16 职场文书
病人慰问信范文
2015/02/15 职场文书
教师工作能力自我评价
2015/03/04 职场文书
体育委员竞选稿
2015/11/21 职场文书