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原始套接字编程示例分享
Feb 21 Python
Centos5.x下升级python到python2.7版本教程
Feb 14 Python
简单介绍Python的轻便web框架Bottle
Apr 08 Python
详尽讲述用Python的Django框架测试驱动开发的教程
Apr 22 Python
用python标准库difflib比较两份文件的异同详解
Nov 16 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
Jun 26 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
Jul 09 Python
Django 反向生成url实例详解
Jul 30 Python
使用pandas的box_plot去除异常值
Dec 10 Python
Python终端输出彩色字符方法详解
Feb 11 Python
Python读取yaml文件的详细教程
Jul 21 Python
Pandas中两个dataframe的交集和差集的示例代码
Dec 13 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
用session做客户验证时的注意事项
2006/10/09 PHP
window+nginx+php环境配置 附配置搭配说明
2010/12/29 PHP
php简单实现文件或图片强制下载的方法
2016/12/06 PHP
swoole_process实现进程池的方法示例
2018/10/29 PHP
PHP asXML()函数讲解
2019/02/03 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
2019/10/30 PHP
让你的博文自动带上缩址的实现代码,方便发到微博客上
2010/12/28 Javascript
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
JavaScript编程中window的location与history对象详解
2015/10/26 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
jquery分页插件jquery.pagination.js使用方法解析
2016/04/01 Javascript
浅谈jQuery hover(over, out)事件函数
2016/12/03 Javascript
BootStrap Fileinput的使用教程
2016/12/30 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
2017/06/20 Javascript
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
Angular中管道操作符(|)的使用方法
2017/12/15 Javascript
最后说说Vue2 SSR 的 Cookies 问题
2018/05/25 Javascript
微信小程序+云开发实现欢迎登录注册
2019/05/24 Javascript
ES6 Map结构的应用实例分析
2019/06/26 Javascript
vue请求服务器数据后绑定不上的解决方法
2019/10/30 Javascript
微信小程序使用GoEasy实现websocket实时通讯
2020/05/19 Javascript
vue keep-alive的简单总结
2021/01/25 Vue.js
[04:49]2014DOTA2国际邀请赛 Newbee顺利挺进总决赛 ImbaTV独家专访
2014/07/19 DOTA
python实现将html表格转换成CSV文件的方法
2015/06/28 Python
Python批量修改文本文件内容的方法
2016/04/29 Python
python学习之hook钩子的原理和使用
2018/10/25 Python
浅谈matplotlib中FigureCanvasXAgg的用法
2020/06/16 Python
HTML5离线缓存Manifest是什么
2016/03/09 HTML / CSS
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
银行领导证婚词
2014/01/11 职场文书
幼儿园新学期寄语
2014/01/18 职场文书
高一学生评语大全
2014/04/25 职场文书
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
大学生违纪检讨书范文
2015/05/07 职场文书
郭明义电影观后感
2015/06/08 职场文书