浅谈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实现将n个点均匀地分布在球面上的方法
Mar 12 Python
从Python的源码浅要剖析Python的内存管理
Apr 16 Python
python对象及面向对象技术详解
Jul 19 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
Nov 19 Python
Python基础语言学习笔记总结(精华)
Nov 14 Python
Python使用Pickle库实现读写序列操作示例
Jun 15 Python
pandas中apply和transform方法的性能比较及区别介绍
Oct 30 Python
python SQLAlchemy的Mapping与Declarative详解
Jul 04 Python
Django框架ORM数据库操作实例详解
Nov 07 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
Apr 24 Python
python使用scapy模块实现ping扫描的过程详解
Jan 21 Python
Pyside2中嵌入Matplotlib的绘图的实现
Feb 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
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
2007/01/29 PHP
发布一个用PHP fsockopen写的HTTP下载的类
2007/02/22 PHP
PHP ? EasyUI DataGrid 资料取的方式介绍
2012/11/07 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
js 匿名调用实现代码
2009/06/19 Javascript
JavaScript让IE浏览器event对象符合W3C DOM标准
2009/11/24 Javascript
全面理解面向对象的 JavaScript(来自ibm)
2013/11/10 Javascript
JS测试显示屏分辨率以及屏幕尺寸的方法
2013/11/22 Javascript
原生js实现淘宝首页点击按钮缓慢回到顶部效果
2014/04/06 Javascript
javascript刷新父页面的各种方法汇总
2014/09/03 Javascript
JavaScript中pop()方法的使用教程
2015/06/09 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
浅谈Angular路由复用策略
2017/10/04 Javascript
vue+Java后端进行调试时解决跨域问题的方式
2017/10/19 Javascript
基于Vue实现微信小程序的图文编辑器
2018/07/25 Javascript
Nuxt.js SSR与权限验证的实现
2018/11/21 Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
2018/11/27 Javascript
bootstrap Table实现合并相同行
2019/07/19 Javascript
微信小程序设置滚动条过程详解
2019/07/25 Javascript
laypage.js分页插件使用方法详解
2019/07/27 Javascript
详解Vue-cli3.X使用px2rem遇到的问题
2019/08/09 Javascript
使用 JavaScript 创建并下载文件(模拟点击)
2019/10/25 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
python访问纯真IP数据库的代码
2011/05/19 Python
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
浅谈python标准库--functools.partial
2019/03/13 Python
python向字符串中添加元素的实例方法
2019/06/28 Python
感知器基础原理及python实现过程详解
2019/09/30 Python
Python实现直播推流效果
2019/11/26 Python
Python.append()与Python.expand()用法详解
2019/12/18 Python
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
企业申诉管理制度
2014/01/30 职场文书
工作决心书范文
2014/03/11 职场文书
大学生个人求职信
2014/06/02 职场文书
军训决心书范文
2015/09/22 职场文书
浅谈Vue的computed计算属性
2022/03/21 Vue.js