解决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实现QQ游戏大家来找茬辅助工具
Sep 14 Python
python的即时标记项目练习笔记
Sep 18 Python
简单介绍Python的Django框架的dj-scaffold项目
May 30 Python
Python中矩阵库Numpy基本操作详解
Nov 21 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
Jan 04 Python
python实现决策树分类(2)
Aug 30 Python
python八皇后问题的解决方法
Sep 27 Python
Django框架组成结构、基本概念与文件功能分析
Jul 30 Python
使用TensorFlow直接获取处理MNIST数据方式
Feb 10 Python
python随机模块random使用方法详解
Feb 14 Python
python中复数的共轭复数知识点总结
Dec 06 Python
Python Django 后台管理之后台模型属性详解
Apr 25 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中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
WordPress迁移时一些常见问题的解决方法整理
2015/11/24 PHP
Zend Framework教程之Resource Autoloading用法实例
2016/03/08 PHP
javascript实现动态CSS换肤技术的脚本
2007/06/29 Javascript
Auntion-TableSort国人写的一个javascript表格排序的东西
2007/11/12 Javascript
JavaScript 函数replace深入了解
2013/03/14 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
JavaScript学习小结之使用canvas画“哆啦A梦”时钟
2016/07/24 Javascript
javascript淘宝主图放大镜功能
2016/10/20 Javascript
Vue概念及常见命令介绍(1)
2016/12/08 Javascript
PHP 实现一种多文件上传的方法
2017/09/20 Javascript
angularjs 页面自适应高度的方法
2018/01/17 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
vue中利用iscroll.js解决pc端滚动问题
2020/02/15 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
[06:07]辉夜杯现场观众互动 “比谁远送显示器”
2015/12/26 DOTA
Python内置函数的用法实例教程
2014/09/08 Python
Python编程生成随机用户名及密码的方法示例
2017/05/05 Python
python基于物品协同过滤算法实现代码
2018/05/31 Python
python安装scipy的步骤解析
2019/09/28 Python
Python @property及getter setter原理详解
2020/03/31 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
2021/03/02 Python
美国的Eastbay旗下的运动款子品牌:Final-Score
2018/01/01 全球购物
应用电子技术专业个人求职信
2013/09/21 职场文书
最新英语专业学生求职信范文
2013/09/21 职场文书
音乐学院硕士生的自我评价分享
2013/11/01 职场文书
幼儿园英语教学反思
2014/01/30 职场文书
护士长竞聘书
2014/03/31 职场文书
公证书样本
2014/04/10 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
荒岛余生观后感
2015/06/09 职场文书
银行培训心得体会范文
2016/01/09 职场文书
应用最多的公文《通知》如何写?
2019/04/02 职场文书
vue使用Google Recaptcha验证的实现示例
2021/08/23 Vue.js
JVM钩子函数的使用场景详解
2021/08/23 Java/Android