解决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+Django在windows下的开发环境配置图解
Nov 11 Python
python读写ini配置文件方法实例分析
Jun 30 Python
python如何拆分含有多种分隔符的字符串
Mar 20 Python
使用Anaconda3建立虚拟独立的python2.7环境方法
Jun 11 Python
Python BS4库的安装与使用详解
Aug 08 Python
Django框架验证码用法实例分析
May 10 Python
python中的colorlog库使用详解
Jul 05 Python
python 代码运行时间获取方式详解
Sep 18 Python
python爬虫中PhantomJS加载页面的实例方法
Nov 12 Python
python 破解加密zip文件的密码
Apr 22 Python
python opencv将多个图放在一个窗口的实例详解
Feb 28 Python
Python自动操作神器PyAutoGUI的使用教程
Jun 16 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
图解上海144收音机
2021/03/02 无线电
mysql 字段类型说明
2007/04/27 PHP
php $_SERVER当前完整url的写法
2009/11/12 PHP
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
2016/07/14 PHP
Yii控制器中filter过滤器用法分析
2016/07/15 PHP
使用JQuery快速实现Tab的AJAX动态载入(实例讲解)
2013/12/11 Javascript
js自定义鼠标右键的实现原理及源码
2014/06/23 Javascript
JavaScript模拟重力状态下抛物运动的方法
2015/03/03 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
2016/11/09 Javascript
微信小程序 自定义消息提示框
2017/08/06 Javascript
NodeJS爬虫实例之糗事百科
2017/12/14 NodeJs
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
JS字符串和数组如何实现相互转化
2020/07/02 Javascript
vant 解决tab切换插件标题样式自定义的问题
2020/11/13 Javascript
python merge、concat合并数据集的实例讲解
2018/04/12 Python
在pycharm中python切换解释器失败的解决方法
2018/10/29 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
python异步存储数据详解
2019/03/19 Python
python实现图片九宫格分割
2021/03/07 Python
Django框架序列化与反序列化操作详解
2019/11/01 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
2020/01/06 Python
使用Python来做一个屏幕录制工具的操作代码
2020/01/18 Python
Python unittest 自动识别并执行测试用例方式
2020/03/09 Python
python:解析requests返回的response(json格式)说明
2020/04/30 Python
使用K.function()调试keras操作
2020/06/17 Python
python selenium 获取接口数据的实现
2020/12/07 Python
利用 CSS3 实现的无缝轮播功能代码
2017/09/25 HTML / CSS
亚洲独特体验旅游专家:eOasia
2018/08/15 全球购物
个人实习生的自我评价
2014/02/16 职场文书
高中军训感言500字
2014/02/24 职场文书
学校督导评估方案
2014/06/10 职场文书
人事任命通知
2015/04/20 职场文书
幼儿园中班教育随笔
2015/08/14 职场文书
MySQL事务操作的四大特性以及并发事务问题
2022/04/12 MySQL