解决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 相关文章推荐
使用Pyrex来扩展和加速Python程序的教程
Apr 13 Python
Python itertools模块详解
May 09 Python
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
Jan 20 Python
利用python获取某年中每个月的第一天和最后一天
Dec 15 Python
Python构建XML树结构的方法示例
Jun 30 Python
TensorFlow实现简单卷积神经网络
May 24 Python
解决python selenium3启动不了firefox的问题
Oct 13 Python
python微元法计算函数曲线长度的方法
Nov 08 Python
利用python脚本如何简化jar操作命令
Feb 24 Python
基于Pytorch SSD模型分析
Feb 18 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
Jun 01 Python
Pycharm 如何设置HTML文件自动补全代码或标签
May 21 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
了解咖啡雨林联盟认证 什么是雨林认证 雨林认证是什么意思
2021/03/05 新手入门
php正则替换处理HTML页面的方法
2015/06/17 PHP
Thinkphp框架开发移动端接口(1)
2016/08/18 PHP
PHP中使用mpdf 导出PDF文件的实现方法
2018/10/22 PHP
浅谈PHP中的Trait使用方法
2019/03/22 PHP
jquery实现心算练习代码
2010/12/06 Javascript
分享33个jQuery与CSS3实现的绚丽鼠标悬停效果
2014/12/15 Javascript
javascript版2048小游戏
2015/03/18 Javascript
jQuery插件boxScroll实现图片轮播特效
2015/07/14 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
2015/07/27 Javascript
使用HTML+CSS+JS制作简单的网页菜单界面
2015/07/27 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
2015/11/15 Javascript
AngularJS基础 ng-mouseover 指令简单示例
2016/08/02 Javascript
详解XMLHttpRequest(一)同步请求和异步请求
2016/09/14 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/10/05 Javascript
vue-cli webpack 开发环境跨域详解
2017/05/18 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
彻底理解js面向对象之继承
2018/02/04 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
2018/06/05 Javascript
默认浏览器设置及vue自动打开页面的方法
2018/09/21 Javascript
微信小程序的线程架构【推荐】
2019/05/14 Javascript
解决vue自定义指令导致的内存泄漏问题
2020/08/04 Javascript
python去掉字符串中重复字符的方法
2014/02/27 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
2017/09/05 Python
Python解析、提取url关键字的实例详解
2018/12/17 Python
Python语法分析之字符串格式化
2019/06/13 Python
python使用tkinter库实现五子棋游戏
2019/06/18 Python
python tkinter实现屏保程序
2019/07/30 Python
python计算n的阶乘的方法代码
2019/10/25 Python
通过 Django Pagination 实现简单分页功能
2019/11/11 Python
浅谈Python 参数与变量
2020/06/20 Python
python pip如何手动安装二进制包
2020/09/30 Python
python爬取股票最新数据并用excel绘制树状图的示例
2021/03/01 Python
慈善捐赠倡议书
2014/08/30 职场文书
关于晚自习早退的检讨书
2014/09/13 职场文书
Pytorch 中net.train 和 net.eval的使用说明
2021/05/22 Python