解决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下载文件时显示下载进度的方法
Apr 02 Python
Python易忽视知识点小结
May 25 Python
使用Python实现在Windows下安装Django
Oct 17 Python
Python面向对象程序设计构造函数和析构函数用法分析
Apr 12 Python
Python网络爬虫之爬取微博热搜
Apr 18 Python
详解Python3中setuptools、Pip安装教程
Jun 18 Python
Numpy将二维数组添加到空数组的实现
Dec 05 Python
Python startswith()和endswith() 方法原理解析
Apr 28 Python
python调用API接口实现登陆短信验证
May 10 Python
python小技巧——将变量保存在本地及读取
Nov 13 Python
Python操作Excel的学习笔记
Feb 18 Python
Python 绘制多因子柱状图
May 11 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 XML error parsing SOAP payload on line 1
2010/06/17 PHP
Linux下CoreSeek及PHP扩展模块的安装
2012/09/23 PHP
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
2014/06/12 PHP
Linux下PHP安装mcrypt扩展模块笔记
2014/09/10 PHP
PHP开发注意事项总结
2015/02/04 PHP
PHP处理大量表单字段的便捷方法
2015/02/07 PHP
常见的四种POST 提交数据方式(小总结)
2015/10/08 PHP
ExtJs扩展之GroupPropertyGrid代码
2010/03/05 Javascript
jQuery中:image选择器用法实例
2015/01/03 Javascript
纯js实现无限空间大小的本地存储
2015/06/18 Javascript
javascript中的Function.prototye.bind
2015/06/25 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
JavaScript 对象深入学习总结(经典)
2015/09/29 Javascript
sencha ext js 6 快速入门(必看)
2016/06/01 Javascript
使用JQuery中的trim()方法去掉前后空格
2016/09/16 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
微信小程序 天气预报开发实例代码源码
2017/01/20 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
详解Webpack+Babel+React开发环境的搭建的方法步骤
2018/01/09 Javascript
iView-admin 动态路由问题的解决方法
2018/10/03 Javascript
Vue切换div显示隐藏,多选,单选代码解析
2020/07/14 Javascript
vue 修改 data 数据问题并实时显示操作
2020/09/07 Javascript
Python HTML解析模块HTMLParser用法分析【爬虫工具】
2019/04/05 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
python中pip的使用和修改下载源的方法
2019/07/08 Python
ASOS比利时:英国线上零售商及自有品牌
2018/07/29 全球购物
澳大利亚墨尔本的在线时装店:LORETA
2018/09/14 全球购物
手工制作的意大利太阳镜和光学元件:Illesteva
2019/01/19 全球购物
什么是smarty? Smarty的优点是什么?
2013/08/11 面试题
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
小学班长竞选演讲稿
2014/04/24 职场文书
心理学专业求职信
2014/06/16 职场文书
2015年中个人总结范文
2015/03/10 职场文书
Nginx + consul + upsync 完成动态负载均衡的方法详解
2021/03/31 Servers
MySQL读取JSON转换的方式
2022/03/18 MySQL