解决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 05 Python
python基础教程之循环介绍
Aug 29 Python
Django框架下在视图中使用模版的方法
Jul 16 Python
Python简单爬虫导出CSV文件的实例讲解
Jul 06 Python
利用Django提供的ModelForm增删改数据的方法
Jan 06 Python
python3+PyQt5 实现Rich文本的行编辑方法
Jun 17 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
Jul 15 Python
Python基于Tkinter编写crc校验工具
May 06 Python
python实现简单贪吃蛇游戏
Sep 29 Python
python3处理word文档实例分析
Dec 01 Python
Python爬虫回测股票的实例讲解
Jan 22 Python
Python字典的基础操作
Nov 01 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原理之变量分离/引用(Variables Separation)
2013/08/09 PHP
PHP转盘抽奖接口实例
2015/02/09 PHP
PHP中配置IIS7实现基本身份验证的方法
2015/09/24 PHP
在WordPress的文章编辑器中设置默认内容的方法
2015/12/29 PHP
用php+ajax新建流程(请假、进货、出货等)
2017/06/11 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
动态添加js事件实现代码
2009/03/12 Javascript
Mootools 1.2教程 选项卡效果(Tabs)
2009/09/15 Javascript
jQuery的运行机制和设计理念分析
2011/04/05 Javascript
js判断设备是否为PC并调整图片大小
2014/02/12 Javascript
angularJS 中input示例分享
2015/02/09 Javascript
在JavaScript中正确引用bind方法的应用
2015/05/11 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
2020/11/25 Javascript
14 个折磨人的 JavaScript 面试题
2016/08/08 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
2017/02/22 Javascript
jquery mobile实现可折叠的导航按钮
2017/03/11 Javascript
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
React Native 集成jpush-react-native的示例代码
2017/08/16 Javascript
Node.js进阶之核心模块https入门
2018/05/23 Javascript
python输出当前目录下index.html文件路径的方法
2015/04/28 Python
Python语言实现将图片转化为html页面
2017/12/06 Python
python unittest实现api自动化测试
2018/04/04 Python
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
python实现剪切功能
2019/01/23 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
美国农场商店:Blain’s Farm & Fleet
2020/01/17 全球购物
澳大利亚一站式数码相机商店:CameraPro
2020/03/09 全球购物
自荐信封面
2013/12/04 职场文书
环境工程专业个人求职信
2013/12/05 职场文书
工作鉴定评语
2014/05/04 职场文书
爱与责任师德演讲稿
2014/08/26 职场文书
党员个人对照检查材料思想汇报
2014/09/16 职场文书
党的群众路线教育实践活动个人剖析材料
2014/10/07 职场文书
小学生思想品德评语
2014/12/31 职场文书
党课主持词大全
2015/06/30 职场文书