解决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的PEAK来适配协议的教程
Apr 14 Python
Python3使用requests包抓取并保存网页源码的方法
Mar 15 Python
Python使用剪切板的方法
Jun 06 Python
python删除某个字符
Mar 19 Python
matplotlib实现热成像图colorbar和极坐标图的方法
Dec 13 Python
在Python 字典中一键对应多个值的实例
Feb 03 Python
python实现QQ空间自动点赞功能
Apr 09 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
Jun 03 Python
Python使用线程来接收串口数据的示例
Jul 02 Python
Django REST框架创建一个简单的Api实例讲解
Nov 05 Python
Django执行源生mysql语句实现过程解析
Nov 12 Python
Python OpenCV 彩色与灰度图像的转换实现
Jun 05 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
后宫无数却洁身自好的男主,唐三只爱小舞
2020/03/02 国漫
磨咖啡豆的密诀
2021/03/03 冲泡冲煮
php中session过期时间设置及session回收机制介绍
2014/05/05 PHP
php实现递归抓取网页类实例
2015/04/03 PHP
php抽象方法和抽象类实例分析
2016/12/07 PHP
thinkphp修改配置进入默认首页的方法
2017/02/07 PHP
JavaScript DOM学习第四章 getElementByTagNames
2010/02/19 Javascript
鼠标选择动态改变网页背景颜色的JS代码
2013/12/10 Javascript
按下回车键指向下一个位置的一个函数代码
2014/03/10 Javascript
使用JS或jQuery模拟鼠标点击a标签事件代码
2014/03/10 Javascript
jquery获取选中的文本和值的方法
2014/07/08 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
jQuery+HTML5+CSS3制作支持响应式布局时间轴插件
2016/08/10 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
2016/09/13 Javascript
AngularJS入门教程之数据绑定用法示例
2016/11/01 Javascript
jQuery插件WebUploader实现文件上传
2016/11/07 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
2017/03/09 Javascript
谈谈我在vue-cli3中用预渲染遇到的坑
2020/04/22 Javascript
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
python 内置函数filter
2017/06/01 Python
python使用openpyxl库修改excel表格数据方法
2018/05/03 Python
python识别图像并提取文字的实现方法
2019/06/28 Python
Scrapy爬虫文件批量运行的实现
2020/09/30 Python
HTML5 canvas实现的静态循环滚动播放弹幕
2021/01/05 HTML / CSS
LookFantastic丹麦:英国美容护肤精品在线商城
2016/08/18 全球购物
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
婴儿地球:Baby Earth
2018/12/25 全球购物
WSDL的操作类型主要有几种
2013/07/19 面试题
中专毕业自我鉴定
2013/10/16 职场文书
会计工作心得体会
2014/01/13 职场文书
自动化毕业生专业自荐书范文
2014/02/04 职场文书
借款担保书范文
2014/05/13 职场文书
事业单位人员的自我评价范文
2014/09/21 职场文书
论文评审意见
2015/06/05 职场文书
Java实现添加条码或二维码到Word文档
2022/06/01 Java/Android
Pygame游戏开发之太空射击实战敌人精灵篇
2022/08/05 Python