解决Keras中CNN输入维度报错问题


Posted in Python onJune 29, 2020

想要写分类器对图片进行分类,用到了CNN。然而,在运行程序时,一直报错:

ValueError: Negative dimension size caused by subtracting 5 from 1 for ‘conv2d_1/convolution' (op: ‘Conv2D') with input shapes: [?,1,28,28], [5,5,28,30].

这部分提到的代码是这样的,这是我的分类器的输入层:

model.add(Conv2D(30,(5, 5), input_shape=(1, 28, 28), activation='relu',padding="valid"))

问题出在input_shape上,报错的大意就是我的输入的维度是错误的。

百思不得其解,在Stackoverflow上找到了答案:

Keras的图片处理文档中给出:

dim_ordering: One of {“th”, “tf”}. “tf” mode means that the images should have shape (samples, height, width, channels), “th” mode means that the images should have shape (samples, channels, height, width). It defaults to the image_dim_ordering value found in your Keras config file at ~/.keras/keras.json. If you never set it, then it will be “tf”.

翻译过来意思就是:关于图片的维度顺序有两种类型,分别是“th”和”tf“,它们的差别如下:

图片维序类型为 th 时(dim_ordering='th'): 输入数据格式为[samples][channels][rows][cols];

# 图片维序类型为 tf 时(dim_ordering='tf'): 输入数据格式为[samples][rows][cols][channels];

在Keras里默认的是“tf”顺序,如果想要改为“th”顺序,需要手动在前面加上如下代码:

from keras import backend as K

K.set_image_dim_ordering('th')

现在回头看我的输入维度顺序,显然是用了th的格式,

model.add(Conv2D(30,(5, 5), input_shape=(1, 28, 28), activation='relu',padding="valid"))

所以,程序一定会报错。

于是在建立模型前加入了前面提到的代码。

至此,该问题解决。

补充知识:Keras一维卷积维度报错

在使用Keras维度报错的时候很有可能是因为在池化层出错。卷积层里面的维度一般都是3维数据,但是在池化是如果设置是这样的,那么输出的就是二维数据:

model.add(Conv1D(filters=23, kernel_size=4, activation='relu'))

model.add(AveragePooling1D())

如果下面接的还是卷积层的话,这样的池化输出是会报错的,这个时候就需要让池化层的输出为3维,这样设置就可以了:

model.add(Conv1D(filters=23, kernel_size=4, activation='relu'))

model.add(AveragePooling1D(2, strides=2))

另外,在卷积层后跟着全连接层的话,中间一般是要加flatten层,使数据输出为全连接层能接受的2维,否则的话可能网络结果是错的。

以上这篇解决Keras中CNN输入维度报错问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python类参数self使用示例
Feb 17 Python
浅谈Python中copy()方法的使用
May 21 Python
Python 修改列表中的元素方法
Jun 26 Python
Python类装饰器实现方法详解
Dec 21 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
Aug 13 Python
python rsync服务器之间文件夹同步脚本
Aug 29 Python
python实现超级马里奥
Mar 18 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
Apr 20 Python
基于Python把网站域名解析成ip地址
May 25 Python
python super()函数的基本使用
Sep 10 Python
Pycharm plot独立窗口显示的操作
Dec 11 Python
matplotlib制作雷达图报错ValueError的实现
Jan 05 Python
Python字符串split及rsplit方法原理详解
Jun 29 #Python
浅谈Keras参数 input_shape、input_dim和input_length用法
Jun 29 #Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
Jun 29 #Python
使用keras时input_shape的维度表示问题说明
Jun 29 #Python
在Keras中CNN联合LSTM进行分类实例
Jun 29 #Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
Jun 29 #Python
Python建造者模式案例运行原理解析
Jun 29 #Python
You might like
简单的方法让你的后台登录更加安全(php中加session验证)
2012/08/22 PHP
记录PHP错误日志 display_errors与log_errors的区别
2012/10/09 PHP
PHP批量生成静态HTML的简单原理和方法
2014/04/20 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
微信自定义菜单的处理开发示例
2015/04/16 PHP
PHP数组实例详解
2016/06/26 PHP
教你在header中隐藏php的版本信息
2016/08/10 PHP
js 自定义的联动下拉框
2010/02/07 Javascript
JQuery实现的在新窗口打开链接的方法小结
2010/04/22 Javascript
JavaScript接口的实现三种方式(推荐)
2016/06/14 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
2016/06/21 Javascript
JQuery学习总结【一】
2016/12/01 Javascript
移动端基础事件总结与应用
2017/01/12 Javascript
微信小程序 生命周期函数详解
2017/05/24 Javascript
JavaScript实现微信号随机切换代码
2018/03/09 Javascript
js canvas实现二维码和图片合成的海报
2020/11/19 Javascript
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
2019/01/18 Javascript
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
Python面向对象之类的内置attr属性示例
2018/12/14 Python
对python中大文件的导入与导出方法详解
2018/12/28 Python
实例介绍Python中整型
2019/02/11 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
灵活运用CSS3特性绘制简易版围棋效果
2016/09/28 HTML / CSS
详解css3 flex弹性盒自动铺满写法
2020/09/17 HTML / CSS
Canvas 文字碰撞检测并抽稀的方法
2019/05/27 HTML / CSS
美国生鲜及杂货电商:FreshDirect
2018/01/29 全球购物
Oakley西班牙官方商店:太阳眼镜和男女运动服
2019/04/26 全球购物
PREMIUM-MALL法国:行李、箱包及配件在线
2019/05/30 全球购物
DIY手工制作经营店创业计划书
2014/02/01 职场文书
中国入世承诺
2014/04/01 职场文书
篮球社团活动总结
2014/06/27 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
高中生思想道德自我评价
2015/03/09 职场文书
工程技术员岗位职责
2015/04/11 职场文书
公安机关起诉意见书
2015/05/20 职场文书
Nginx 常用配置
2022/05/15 Servers