解决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处理中文编码和判断编码示例
Feb 26 Python
简单谈谈Python中的几种常见的数据类型
Feb 10 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
Jan 10 Python
Python反射的用法实例分析
Feb 11 Python
django框架实现一次性上传多个文件功能示例【批量上传】
Jun 19 Python
解决pycharm最左侧Tool Buttons显示不全的问题
Dec 17 Python
Python如何实现小程序 无限求和平均
Feb 18 Python
Python爬虫程序架构和运行流程原理解析
Mar 09 Python
在Keras中利用np.random.shuffle()打乱数据集实例
Jun 15 Python
matplotlib之pyplot模块之标题(title()和suptitle())
Feb 22 Python
python ansible自动化运维工具执行流程
Jun 24 Python
Python&Matlab实现樱花的绘制
Apr 07 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简单获取复选框值的方法
2016/05/11 PHP
PHP 极验验证码实例讲解
2016/09/29 PHP
尝试在让script的type属性等于text/html
2013/01/15 Javascript
javascript计算星座属相(十二生肖属相)示例代码
2014/01/09 Javascript
jquery选择器之内容过滤选择器详解
2014/01/27 Javascript
jquery库或JS文件在eclipse下报错问题解决方法
2014/04/17 Javascript
三种AngularJS中获取数据源的方式
2016/02/02 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
使用sessionStorage解决vuex在页面刷新后数据被清除的问题
2018/04/13 Javascript
jQuery 点击获取验证码按钮及倒计时功能
2018/09/20 jQuery
推荐一个基于Node.js的表单验证库
2019/02/15 Javascript
Javascript之高级数组API的使用实例
2019/03/08 Javascript
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
2019/06/18 jQuery
vue 中固定导航栏的实例代码
2019/11/01 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
2020/06/05 Javascript
JS script脚本中async和defer区别详解
2020/06/24 Javascript
微信小程序自定义底部弹出框功能
2020/11/18 Javascript
Python中的tuple元组详细介绍
2015/02/02 Python
python3设计模式之简单工厂模式
2017/10/17 Python
对django中render()与render_to_response()的区别详解
2018/10/16 Python
python抓取需要扫微信登陆页面
2019/04/29 Python
Python企业编码生成系统之系统主要函数设计详解
2019/07/26 Python
django中media媒体路径设置的步骤
2019/11/15 Python
python识别验证码的思路及解决方案
2020/09/13 Python
Python实现简单的猜单词小游戏
2020/10/28 Python
利用python进行文件操作
2020/12/04 Python
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
关于递归的一道.NET面试题
2013/05/12 面试题
圣诞节红领巾广播稿
2014/02/03 职场文书
学前班评语大全
2014/05/04 职场文书
护理专业毕业生自荐书
2014/05/24 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
分公司总经理岗位职责
2014/07/30 职场文书
实施意见格式范本
2015/06/05 职场文书
使用PDF.js渲染canvas实现预览pdf的效果示例
2021/04/17 Javascript