解决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服务器端收发请求的实现代码
Sep 29 Python
使用grappelli为django admin后台添加模板
Nov 18 Python
用Python实现服务器中只重载被修改的进程的方法
Apr 30 Python
Python sorted函数详解(高级篇)
Sep 18 Python
PyQt打开保存对话框的方法和使用详解
Feb 27 Python
十分钟搞定pandas(入门教程)
Jun 21 Python
python支持多线程的爬虫实例
Dec 21 Python
Pytorch释放显存占用方式
Jan 13 Python
基于python修改srt字幕的时间轴
Feb 03 Python
python正则过滤字母、中文、数字及特殊字符方法详解
Feb 11 Python
Python接口测试get请求过程详解
Feb 28 Python
OpenCV项目实践之停车场车位实时检测
Apr 11 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
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
如何使用php判断所处服务器操作系统的类型
2013/06/20 PHP
PHP整合PayPal支付
2015/06/11 PHP
一个非常实用的php文件上传类
2017/07/04 PHP
通过PHP设置BugFree获取邮箱通知
2019/04/25 PHP
用javascript动态调整iframe高度的代码
2007/04/10 Javascript
通过event对象的fromElement属性解决热区设置主实体的一个bug
2008/12/22 Javascript
IE8 兼容性问题(属性名区分大小写)
2009/06/04 Javascript
一些经常会用到的Javascript检测函数
2010/05/31 Javascript
代码获取历史上的今天发生的事
2014/04/11 Javascript
Jquery实现上下移动和排序代码
2016/10/17 Javascript
vue element项目引入icon图标的方法
2018/06/06 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
Vue实现一个图片懒加载插件
2019/03/11 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
JS typeof fn === 'function' && fn()详解
2020/08/22 Javascript
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
Python学习笔记之常用函数及说明
2014/05/23 Python
python中xrange用法分析
2015/04/15 Python
django 外键model的互相读取方法
2018/12/15 Python
在PyCharm中批量查找及替换的方法
2019/01/20 Python
python os.path.isfile()因参数问题判断错误的解决
2019/11/29 Python
Python多线程多进程实例对比解析
2020/03/12 Python
python 串行执行和并行执行实例
2020/04/30 Python
详解Python 循环嵌套
2020/07/09 Python
Python函数调用追踪实现代码
2020/11/27 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
HTML5 Canvas 旋转风车绘制
2017/08/18 HTML / CSS
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
初一地理教学反思
2014/01/16 职场文书
2014审计局领导班子民主生活会对照检查材料思想汇报
2014/09/20 职场文书
2014党员干部四风问题对照检查材料思想汇报
2014/09/24 职场文书
2014年学校卫生工作总结
2014/11/20 职场文书
酒店前台接待岗位职责
2015/04/02 职场文书
i5-10400f处理相当于i7多少水平
2022/04/19 数码科技