浅谈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设计模式编程中Adapter适配器模式的使用实例
Mar 02 Python
Python数据操作方法封装类实例
Jun 23 Python
用python代码将tiff图片存储到jpg的方法
Dec 04 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
Dec 19 Python
python使用knn实现特征向量分类
Dec 26 Python
python利用thrift服务读取hbase数据的方法
Dec 27 Python
pycharm打开命令行或Terminal的方法
Jan 16 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
Aug 21 Python
python代码实现TSNE降维数据可视化教程
Feb 28 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
Feb 28 Python
django form和field具体方法和属性说明
Jul 09 Python
Django REST 异常处理详解
Jul 15 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
全国FM电台频率大全 - 17 湖北省
2020/03/11 无线电
phpwind中的数据库操作类
2007/01/02 PHP
php实现点击可刷新验证码
2015/11/07 PHP
laravel学习教程之存取器
2016/07/30 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
什么是JavaScript
2009/08/13 Javascript
JavaScript字符串String和Array操作的有趣方法
2012/12/18 Javascript
html超链接打开窗口大小的方法
2013/03/05 Javascript
jQuery中ajax的load()与post()方法实例详解
2016/01/05 Javascript
jQuery Ajax 上传文件处理方式介绍(推荐)
2016/06/30 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
Js利用Canvas实现图片压缩功能
2017/09/13 Javascript
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
jQuery 动画与停止动画效果实例详解
2020/05/19 jQuery
跟老齐学Python之永远强大的函数
2014/09/14 Python
Python动态加载模块的3种方法
2014/11/22 Python
在Gnumeric下使用Python脚本操作表格的教程
2015/04/14 Python
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
python3 图片referer防盗链的实现方法
2018/03/12 Python
解决python3爬虫无法显示中文的问题
2018/04/12 Python
Flask核心机制之上下文源码剖析
2018/12/25 Python
Django跨域请求原理及实现代码
2020/11/14 Python
Python中的流程控制详解
2021/02/18 Python
娇韵诗Clarins意大利官方网站:法国天然护肤品牌
2020/03/11 全球购物
Lungolivigno Fashion官网:高级时装在线购物
2020/10/17 全球购物
shell程序如何生命变量?shell变量是弱变量吗?
2014/11/10 面试题
业务助理岗位职责
2013/11/18 职场文书
学生周末回家住宿长期请假条
2014/02/15 职场文书
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
元旦寄语大全
2014/04/10 职场文书
单位接收函格式
2015/01/30 职场文书
2015年见习期个人工作总结
2015/05/28 职场文书
张丽莉观后感
2015/06/16 职场文书
网络安全倡议书(3篇)
2019/09/18 职场文书
mysql性能优化以及配置连接参数设置
2022/05/06 MySQL