Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)


Posted in Python onJuly 07, 2020

终于构建出了第一个神经网络,Keras真的很方便。

之前不知道Keras这么方便,在构建神经网络的过程中绕了很多弯路,最开始学的TensorFlow,后来才知道Keras。

TensorFlow和Keras的关系,就像c语言和python的关系,所以Keras是真的好用。

搞不清楚数据的标准化和归一化的关系,想对原始数据做归一化,却误把数据做了标准化,导致用model.predict预测出来的值全是0.0,在网上搜了好久但是没搜到答案,后来自己又把程序读了一遍,突然灵光一现好像是数据归一化出了问题,于是把数据预处理部分的标准化改成了归一化,修改过来之后才能正常预测出来值,才得到应有的数据趋势。

标准化:

(x-mean(x))/std(x) 这是使用z-score方法规范化

归一化:

(x-min(x))/(max(x)-min(x)) 这是常用的最小最大规范化方法

补充知识:keras加载已经训练好的模型文件,进行预测时却发现预测结果几乎为同一类(本人预测时几乎均为为第0类)**

原因:在进行keras训练时候,使用了keras内置的数据读取方式,但是在进行预测时候,使用了自定义的数据读取方式,本人为图片读取。

解决办法查看如下代码:

##############训练:
train_gen = ImageDataGenerator(rotation_range=10,
    width_shift_range=0.2,
    shear_range=0.2,
    zoom_range=0.2,
    fill_mode='constant',
    cval=0)
train_generator = train_gen.flow_from_directory(train_path,
      target_size=(224, 224),
      batch_size=16,
      class_mode='categorical',
      save_to_dir=train_g,
      save_prefix='man',
      save_format='jpg')

#############预测
img = cv2.imread(img_path)
img = cv2.resize(img, (row, col))
img = np.expands(img, axis=0)
out = model.predict(img)
# 上述方法是不行的,仔细查看keras内置读取方式,可以观察到内置了load_img方式
# 因此,我们在预测时候,将读取图片的方式改为
from keras.preprocessing.image import load_img, img_to_array
img = load_img(img_path)
img = img_to_array(img, target_size=(row, col))
img = np.expands(img, axis=0)
out = model.predict(img)

注:本文意在说明 对训练数据和预测数据的读取、预处理方式上应该在某种程度上保持一致,从而避免训练结果和真实预测结果相差过大的情况。

以上这篇Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用装饰器和线程限制函数执行时间的方法
Apr 18 Python
python下载文件记录黑名单的实现代码
Oct 24 Python
python执行使用shell命令方法分享
Nov 08 Python
python实现画圆功能
Jan 25 Python
python实现一组典型数据格式转换
Dec 15 Python
Pandas之DataFrame对象的列和索引之间的转化
Jun 25 Python
详解python中*号的用法
Oct 21 Python
python selenium实现发送带附件的邮件代码实例
Dec 10 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
Jan 16 Python
浅谈sklearn中predict与predict_proba区别
Jun 28 Python
python opencv实现简易画图板
Aug 27 Python
python向企业微信发送文字和图片消息的示例
Sep 28 Python
浅谈django框架集成swagger以及自定义参数问题
Jul 07 #Python
Django REST Swagger实现指定api参数
Jul 07 #Python
python中查看.db文件中表格的名字及表格中的字段操作
Jul 07 #Python
python db类用法说明
Jul 07 #Python
python文件编写好后如何实践
Jul 07 #Python
python 删除excel表格重复行,数据预处理操作
Jul 06 #Python
pandas.DataFrame.drop_duplicates 用法介绍
Jul 06 #Python
You might like
php 操作excel文件的方法小结
2009/12/31 PHP
php调用C代码的实现方法
2014/03/11 PHP
php实现Mysql简易操作类
2015/10/11 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
JavaScript可否多线程? 深入理解JavaScript定时机制
2012/05/23 Javascript
js或者jquery判断图片是否加载完成实现代码
2013/03/20 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
2013/04/12 Javascript
javascript中全局对象的isNaN()方法使用介绍
2013/12/19 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
轻量级的原生js日历插件calendar.js使用指南
2015/04/28 Javascript
JavaScript中数组继承的简单示例
2015/07/29 Javascript
JavaScript基本的输出和嵌入式写法教程
2015/10/20 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
2016/02/02 Javascript
原生JS改变透明度实现轮播效果
2017/03/24 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
Vue.js弹出模态框组件开发的示例代码
2017/07/26 Javascript
微信小程序之分享页面如何返回首页的示例
2018/03/28 Javascript
vue实现多个元素或多个组件之间动画效果
2018/09/25 Javascript
一些手写JavaScript常用的函数汇总
2019/04/16 Javascript
JavaScript Math对象和调试程序的方法分析
2019/05/13 Javascript
Vue中img的src是动态渲染时不显示的解决
2019/11/14 Javascript
这样回答继承可能面试官更满意
2019/12/10 Javascript
使用vue实现一个电子签名组件的示例代码
2020/01/06 Javascript
JavaScript ECMA-262-3 深入解析(一):执行上下文实例分析
2020/04/25 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
[05:02][DOTA2]DOTA进化论 第一期
2013/09/27 DOTA
python命令行参数sys.argv使用示例
2014/01/28 Python
django admin 自定义替换change页面模板的方法
2019/08/23 Python
HTML5中Localstorage的使用教程
2015/07/09 HTML / CSS
房地产销售经理岗位职责
2014/01/01 职场文书
骨干教师考核方案
2014/05/09 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
习总书记三严三实学习心得体会
2014/10/13 职场文书
优秀家长事迹材料(2016推荐版)
2016/02/29 职场文书
导游词之五台山
2019/10/11 职场文书
手把手教你导入Go语言第三方库
2021/08/04 Golang