解决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实现的数据结构与算法之链表详解
Apr 22 Python
Python argv用法详解
Jan 08 Python
python基础教程之五种数据类型详解
Jan 12 Python
python递归全排列实现方法
Aug 18 Python
Python在cmd上打印彩色文字实现过程详解
Aug 07 Python
Python 转换RGB颜色值的示例代码
Oct 13 Python
python kafka 多线程消费者&手动提交实例
Dec 21 Python
Python json格式化打印实现过程解析
Jul 21 Python
Python 如何操作 SQLite 数据库
Aug 17 Python
python实现粒子群算法
Oct 15 Python
Python如何使用循环结构和分支结构
Apr 13 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操作mongoDB实例分析
2014/12/29 PHP
THINKPHP内容分页代码分享
2015/01/14 PHP
php利用嵌套数组拼接与解析json的方法
2017/02/07 PHP
php实现每日签到功能
2018/11/29 PHP
PHP判断一个变量是否为整数、正整数的方法示例
2019/09/11 PHP
javascript中直接写php代码的方法
2013/07/31 Javascript
Extjs4中Form的使用之本地hiddenfield
2013/11/26 Javascript
JavaScript获得指定对象大小的方法
2015/07/01 Javascript
jQuery中的insertBefore(),insertAfter(),after(),before()区别介绍
2016/09/01 Javascript
基于AngularJS实现iOS8自带的计算器
2016/09/12 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
underscore之function_动力节点Java学院整理
2017/07/11 Javascript
使用JQ完成表格隔行换色的简单实例
2017/08/25 Javascript
JS抛物线动画实例制作
2018/02/24 Javascript
如何在Angular应用中创建包含组件方法示例
2019/03/23 Javascript
详解vue中的父子传值双向绑定及数据更新问题
2019/06/13 Javascript
node.js中 mysql 增删改查操作及async,await处理实例分析
2020/02/11 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
[00:05]ChinaJoy现场 DOTA2玩家高呼“CN DOTA BEST DOTA”
2019/08/04 DOTA
对于Python的Django框架部署的一些建议
2015/04/09 Python
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
使用Python生成XML的方法实例
2017/03/21 Python
浅谈HTML5 & CSS3的新交互特性
2016/07/19 HTML / CSS
酒店总经理欢迎词
2014/01/15 职场文书
校园奶茶店创业计划书
2014/01/23 职场文书
法人代表任命书范本
2014/06/05 职场文书
欢迎横幅标语
2014/06/17 职场文书
酒店餐厅2014重阳节活动策划方案
2014/09/16 职场文书
12.4全国法制宣传日活动总结
2014/11/01 职场文书
财务整改报告范文
2014/11/05 职场文书
新郎婚礼答谢词
2015/01/04 职场文书
唐山大地震的观后感
2015/06/05 职场文书
超强台风观后感
2015/06/09 职场文书
自动在Windows中运行Python脚本并定时触发功能实现
2021/09/04 Python
Python实战之大鱼吃小鱼游戏的实现
2022/04/01 Python
muduo TcpServer模块源码分析
2022/04/26 Redis