浅谈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绘图方法实例入门
May 19 Python
Python定时器实例代码
Nov 01 Python
Python爬虫之正则表达式基本用法实例分析
Aug 08 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
Jan 05 Python
Python流行ORM框架sqlalchemy安装与使用教程
Jun 04 Python
python中while和for的区别总结
Jun 28 Python
python3.8与pyinstaller冲突问题的快速解决方法
Jan 16 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
Mar 18 Python
python3获取控制台输入的数据的具体实例
Aug 16 Python
记录一下scrapy中settings的一些配置小结
Sep 28 Python
Python+OpenCV图像处理——图像二值化的实现
Oct 24 Python
Python 正则模块详情
Nov 02 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微信支付之APP支付方法
2015/03/04 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
添加到收藏夹代码(兼容几乎所有的浏览器)
2007/01/09 Javascript
Jquery调用webService远程访问出错的解决方法
2010/05/21 Javascript
前端js文件合并的三种方式推荐
2016/05/19 Javascript
AngularJS控制器之间的通信方式详解
2016/11/03 Javascript
JS中如何实现复选框全选功能
2016/12/19 Javascript
vue实现ToDoList简单实例
2017/02/07 Javascript
详解在AngularJS的controller外部直接获取$scope
2017/06/02 Javascript
基于vue.js快速搭建图书管理平台
2017/10/29 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
vue.js 使用axios实现下载功能的示例
2018/03/05 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
vue2.0中set添加属性后视图不能更新的解决办法
2019/02/22 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
2019/05/21 Javascript
前端Electron新手入门教程详解
2019/06/21 Javascript
Vue+element-ui添加自定义右键菜单的方法示例
2020/12/08 Vue.js
python mysqldb连接数据库
2009/03/16 Python
python实现的简单文本类游戏实例
2015/04/28 Python
Python字符编码判断方法分析
2016/07/01 Python
python读写json文件的简单实现
2017/04/11 Python
Python JSON格式数据的提取和保存的实现
2019/03/22 Python
Python/Django后端使用PIL Image生成头像缩略图
2019/04/30 Python
全网最细 Python 格式化输出用法讲解(推荐)
2021/01/18 Python
Spartoo比利时:欧洲时尚购物网站
2017/12/06 全球购物
全球地下的服装和态度:Slam Jam
2018/02/04 全球购物
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
Under Armour安德玛意大利官网:美国高端运动科技品牌
2020/01/16 全球购物
渗透攻击的测试步骤
2014/06/07 面试题
妇科医生自荐信
2013/11/05 职场文书
初中教师业务学习材料
2014/05/12 职场文书
护理专业求职信
2014/06/15 职场文书
简单的离婚协议书范本
2014/11/16 职场文书
2015年公司行政后勤工作总结
2015/05/20 职场文书
2019脱贫攻坚工作总结报告范本!
2019/08/06 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers