解决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在不同层级目录import模块的方法
Jan 31 Python
Python语言实现获取主机名根据端口杀死进程
Mar 31 Python
Pycharm学习教程(7)虚拟机VM的配置教程
May 04 Python
解决Django的request.POST获取不到内容的问题
May 28 Python
Python利用scapy实现ARP欺骗的方法
Jul 23 Python
Python 保持登录状态进行接口测试的方法示例
Aug 06 Python
关于pandas的离散化,面元划分详解
Nov 22 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
Dec 04 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
Apr 01 Python
学生如何注册Pycharm专业版以及pycharm的安装
Sep 24 Python
python如何利用Mitmproxy抓包
Oct 10 Python
python的netCDF4批量处理NC格式文件的操作方法
Mar 21 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
PHP7常量数组用法分析
2016/09/26 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
javascript实现的动态文字变换
2007/07/28 Javascript
070823更新的一个[消息提示框]组件 兼容ie7
2007/08/29 Javascript
JavaScript库 开发规则
2009/01/31 Javascript
jQuery 表单验证扩展代码(一)
2010/10/11 Javascript
25个非常棒的jQuery滑块插件和教程小结
2011/09/02 Javascript
javascript 全选与全取消功能的实现代码
2012/12/23 Javascript
JS中setInterval、setTimeout不能传递带参数的函数的解决方案
2013/04/28 Javascript
jquery中对于批量deferred的处理方法
2014/01/22 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
json实现添加、遍历与删除属性的方法
2016/06/17 Javascript
jQuery自定义图片上传插件实例代码
2017/04/04 jQuery
vue动态路由实现多级嵌套面包屑的思路与方法
2017/08/16 Javascript
vue单页应用加百度统计代码(亲测有效)
2018/01/31 Javascript
微信小程序滑动选择器的实现代码
2018/08/10 Javascript
[01:00:25]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS Liquid
2018/03/31 DOTA
Python实现的凯撒密码算法示例
2018/04/12 Python
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
python中reader的next用法
2018/07/24 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
vue常用指令代码实例总结
2020/03/16 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
2020/05/18 Python
python实现学生成绩测评系统
2020/06/22 Python
英国Office鞋店德国网站:在线购买鞋子、靴子和运动鞋
2018/12/19 全球购物
澳大利亚领先的武术用品和健身器材供应商:SMAI
2019/03/24 全球购物
护士思想汇报
2014/01/12 职场文书
篮球赛口号
2014/06/18 职场文书
查摆问题整改措施范文
2014/10/11 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
大学生操行评语大全
2014/12/31 职场文书
人为什么会“幸灾乐祸”?
2019/08/06 职场文书
100句拼搏进取的名言警句,值得一读!
2019/10/07 职场文书
go语言中http超时引发的事故解决
2021/06/02 Golang
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android