解决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(Tornado)模拟登录小米抢手机
Nov 12 Python
用python + openpyxl处理excel2007文档思路以及心得
Jul 14 Python
Python程序中的观察者模式结构编写示例
May 27 Python
基于Python 的进程管理工具supervisor使用指南
Sep 18 Python
教你使用python画一朵花送女朋友
Mar 29 Python
Python用61行代码实现图片像素化的示例代码
Dec 10 Python
python实现画循环圆
Nov 23 Python
关于python中plt.hist参数的使用详解
Nov 28 Python
解决keras加入lambda层时shape的问题
Jun 11 Python
python如何从键盘获取输入实例
Jun 18 Python
Python根据字典的值查询出对应的键的方法
Sep 30 Python
如何使用python自带IDLE的几种方法
Oct 10 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
DC游戏Steam周三特惠 《蝙蝠侠》阿卡姆系列平史低
2020/04/09 欧美动漫
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
2017/02/07 PHP
启用OPCache提高PHP程序性能的方法
2019/03/21 PHP
php如何把表单内容提交到数据库
2019/07/08 PHP
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
js 自动播放的实例代码
2013/11/19 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
jQuery自定义动画函数实例详解(附demo源码)
2015/12/10 Javascript
js实现将选中内容分享到新浪或腾讯微博
2015/12/16 Javascript
易被忽视的js事件问题总结
2016/05/14 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
基于vue.js中事件修饰符.self的用法(详解)
2018/02/23 Javascript
详解用场景去理解函数柯里化(入门篇)
2019/04/11 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
2019/04/28 Javascript
微信小程序实现折线图的示例代码
2019/06/07 Javascript
js实现旋转的星空效果
2019/11/01 Javascript
小程序跨页面交互的作用与方法详解
2020/01/07 Javascript
微信小程序拖拽排序列表的示例代码
2020/07/08 Javascript
[41:37]DOTA2北京网鱼队选拔赛——冲击职业之路
2015/04/13 DOTA
python线程、进程和协程详解
2016/07/19 Python
TensorFlow Session使用的两种方法小结
2018/07/30 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
2020/02/16 Python
python给list排序的简单方法
2020/12/10 Python
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
西雅图的买手店:Totokaelo
2019/10/19 全球购物
经济实惠的名牌太阳镜和眼镜:Privé Revaux
2021/02/07 全球购物
Vans(范斯)新西兰官方网站:美国原创极限运动品牌
2020/09/19 全球购物
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
高中军训感言800字
2014/03/05 职场文书
工作决心书
2014/03/11 职场文书
关于法制教育的宣传语
2015/07/13 职场文书
超市主管竞聘书
2015/09/15 职场文书