解决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中无限元素列表的实现方法
Aug 18 Python
python实现超简单端口转发的方法
Mar 13 Python
Python实现微信公众平台自定义菜单实例
Mar 20 Python
Python运算符重载用法实例
May 28 Python
python数字图像处理之骨架提取与分水岭算法
Apr 27 Python
对python中数组的del,remove,pop区别详解
Nov 07 Python
Python GUI编程完整示例
Apr 04 Python
Win系统PyQt5安装和使用教程
Dec 25 Python
python使用SQLAlchemy操作MySQL
Jan 02 Python
浅谈tensorflow之内存暴涨问题
Feb 05 Python
python如何保存文本文件
Jun 07 Python
Python基于内置函数type创建新类型
Oct 22 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连接SQLServer2005 的问题解决方法
2010/07/19 PHP
php上传图片并压缩的实现方法
2015/12/22 PHP
PHP共享内存使用与信号控制实例分析
2018/05/09 PHP
jQuery EasyUI API 中文文档 - NumberBox数字框
2011/10/13 Javascript
JS和jQuery使用submit方法无法提交表单的原因分析及解决办法
2016/05/17 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
微信小程序开发探究
2016/12/27 Javascript
angularjs实现的前端分页控件示例
2017/02/10 Javascript
vue数据传递--我有特殊的实现技巧
2018/03/20 Javascript
手把手教你vue-cli单页到多页应用的方法
2018/05/31 Javascript
使用vue的transition完成滑动过渡的示例代码
2018/06/25 Javascript
vue axios数据请求及vue中使用axios的方法
2018/09/10 Javascript
手把手教你如何编译打包video.js
2020/12/09 Javascript
Vant+postcss-pxtorem 实现浏览器适配功能
2021/02/05 Javascript
[36:29]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs TNC
2018/04/02 DOTA
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
2016/01/20 Python
Python中random模块生成随机数详解
2016/03/10 Python
Python 找到列表中满足某些条件的元素方法
2018/06/26 Python
Python构建图像分类识别器的方法
2019/01/12 Python
python Django 创建应用过程图示详解
2019/07/29 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
2019/10/24 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
Python3.9.1中使用match方法详解
2021/02/08 Python
CSS3 animation实现简易幻灯片轮播特效
2016/09/27 HTML / CSS
电脑教师的自我评价
2013/12/18 职场文书
就职演讲稿范文
2014/05/19 职场文书
会议欢迎词范文
2015/01/27 职场文书
年度考核个人总结
2015/03/06 职场文书
反腐倡廉主题教育活动总结
2015/05/07 职场文书
2015年超市工作总结范文
2015/05/26 职场文书
入党函调证明材料
2015/06/19 职场文书
2019最新版试用期劳动合同模板!
2019/07/04 职场文书
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL
Win10本地连接不见了怎么恢复? win10系统电脑本地连接不见了解决方法
2023/01/09 数码科技