解决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获取央视节目单的实现代码
Jul 25 Python
Python中pygame的mouse鼠标事件用法实例
Nov 11 Python
Django框架搭建的简易图书信息网站案例
May 25 Python
PyCharm-错误-找不到指定文件python.exe的解决方法
Jul 01 Python
Python实现word2Vec model过程解析
Dec 16 Python
详解python opencv、scikit-image和PIL图像处理库比较
Dec 26 Python
tensorflow 自定义损失函数示例代码
Feb 05 Python
Python脚本去除文件的只读性操作
Mar 05 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
Apr 17 Python
使用tensorflow根据输入更改tensor shape
Jun 23 Python
聊聊python中的异常嵌套
Sep 01 Python
详解Python中的Lock和Rlock
Jan 26 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目录操作实例代码
2014/02/21 PHP
PHP实现的简单在线计算器功能示例
2017/08/02 PHP
PHP实现将标点符号正则替换为空格的方法
2017/08/09 PHP
dojo学习第一天 Tab选项卡 实现
2011/08/28 Javascript
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
Javascript实现返回上一页面并刷新的小例子
2013/12/11 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
js实现div拖动动画运行轨迹效果代码分享
2015/08/27 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
Backbone.js框架中简单的View视图编写学习笔记
2016/02/14 Javascript
基于JS实现数字+字母+中文的混合排序方法
2016/06/06 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
2016/11/11 Javascript
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
JavaScript瀑布流布局实现代码
2017/05/06 Javascript
nodejs acl的用户权限管理详解
2018/03/14 NodeJs
解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题
2018/08/03 Javascript
Node.js net模块功能及事件监听用法分析
2019/01/05 Javascript
JsonServer安装及启动过程图解
2020/02/28 Javascript
[01:10:57]Liquid vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python连接sql server乱码的解决方法
2013/01/28 Python
python通过zlib实现压缩与解压字符串的方法
2014/11/19 Python
Python类的继承和多态代码详解
2017/12/27 Python
python线程池threadpool实现篇
2018/04/27 Python
对python中的iter()函数与next()函数详解
2018/10/18 Python
用Python+OpenCV对比图像质量的几种方法
2019/07/15 Python
python list多级排序知识点总结
2019/10/23 Python
python 浅谈serial与stm32通信的编码问题
2019/12/18 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
2020/03/08 Python
解析html5 canvas实现背景鼠标连线动态效果代码
2019/06/17 HTML / CSS
美国电视购物:QVC
2017/02/06 全球购物
澳大利亚连衣裙和女装在线:Esther
2017/11/11 全球购物
意大利珠宝店:Luxury Zone
2019/01/05 全球购物
Europcar澳大利亚官网:全球汽车租赁领域的领导者
2019/03/24 全球购物
Java编程面试题
2016/04/04 面试题
2014年统战工作总结
2014/12/09 职场文书
在CSS中使用when/else的方法
2022/01/18 HTML / CSS