使用keras时input_shape的维度表示问题说明


Posted in Python onJune 29, 2020

Keras提供了两套后端,Theano和Tensorflow,不同的后端使用时维度顺序dim_ordering会有冲突。

对于一张224*224的彩色图片表示问题,theano使用的是th格式,维度顺序是(3,224,224),即通道维度在前,Caffe采取的也是这种方式。而Tensorflow使用的是tf格式,维度顺序是(224,224,3),即通道维度在后。

Keras默认使用的是Tensorflow。我们在导入模块的时候可以进行查看,也可以切换后端。

使用keras时input_shape的维度表示问题说明

为了代码可以在两种后端兼容,可以通过data_format参数进行维度顺序的设定,data_format='channels_first',对应“th”,data_format='channels_last',对应“tf”。

补充知识:Tensorflow Keras 中input_shape引发的维度顺序冲突问题(NCHW与NHWC)

以tf.keras.Sequential构建卷积层为例:

tf.keras.layers.Conv2D(10, 3, input_shape=(2, 9, 9),padding='same',activation=tf.nn.relu,kernel_initializer='glorot_normal', bias_initializer='glorot_normal'),

这是一个简单的卷积层的定义,主要看input_shape参数:

这是用来指定卷积层输入形状的参数,由于Keras提供了两套后端,Theano和Tensorflow,不同的后端使用时对该参数所指代的维度顺序dim_ordering会有冲突。

Theano(th):

NCHW:顺序是 [batch, in_channels, in_height, in_width]

Tensorflow(tf):keras默认使用这种方式

NHWC:顺序是 [batch, in_height, in_width, in_channels]

即对于上述input_shape=(2, 9, 9)来说:我们先忽略batch,2会被解析为通道数,矩阵大小为9*9,符合我们预期。而tf会将矩阵大小解析为2 * 9 ,且最后一位9代表通道数,与预期不符。

解决

法一:

在卷积层定义中加入参数来让keras在两种后端之间切换:

data_format='channels_first':代表th

data_format='channels_last':代表tf

但是该法在某些时候不成功会报错:

或许是cpu电脑导致的,只支持NHWC即tf模式。

只能修改相应文件的配置来使其支持NCHW,参考这里

法二:(推荐)

使用tf.transpose函数进行高维数据的转置(维度大于2,轴的转换)

如将上述(2,9,9)转为(9,9,2)并且是以2为通道数,即矩阵为9*9,而不是像reshape函数简单的调整维度,若使用reshape函数来转换,只会得到通道数为9,矩阵为9 * 2的数据。

tf.transpose(待转矩阵,(1,2,0))

解释:

​ 其中0,1,2…是原矩阵维度从左到右轴的标号,即(2,9,9)中三个维度分别对应标号0,1,2。而调整过后将标号顺序变为1,2,0 即是把表通道数的轴置于最后,这样转置后的矩阵就满足了keras的默认tf后端。即可正常训练。

以上这篇使用keras时input_shape的维度表示问题说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python strip()函数 介绍
May 24 Python
python自动格式化json文件的方法
Mar 11 Python
Python中的anydbm模版和shelve模版使用指南
Jul 09 Python
Python获取央视节目单的实现代码
Jul 25 Python
Python numpy生成矩阵、串联矩阵代码分享
Dec 04 Python
Python中xrange与yield的用法实例分析
Dec 26 Python
Python实现七彩蟒蛇绘制实例代码
Jan 16 Python
python卸载后再次安装遇到的问题解决
Jul 10 Python
详解Python利用random生成一个列表内的随机数
Aug 21 Python
python使用配置文件过程详解
Dec 28 Python
彻底搞懂 python 中文乱码问题(深入分析)
Feb 28 Python
python-jwt用户认证食用教学的实现方法
Jan 19 Python
在Keras中CNN联合LSTM进行分类实例
Jun 29 #Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
Jun 29 #Python
Python建造者模式案例运行原理解析
Jun 29 #Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
Jun 29 #Python
Python根据指定文件生成XML的方法
Jun 29 #Python
keras在构建LSTM模型时对变长序列的处理操作
Jun 29 #Python
Python爬虫爬取博客实现可视化过程解析
Jun 29 #Python
You might like
PHP内核探索:变量概述
2014/01/30 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
IE6/7/8/9不支持exec的简写方式
2011/05/25 Javascript
js中哈希表的几种用法总结
2014/01/28 Javascript
jQuery简单tab切换效果实现方法
2015/04/08 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
JS实现线性表的链式表示方法示例【经典数据结构】
2017/04/11 Javascript
本地存储localStorage用法详解
2017/07/31 Javascript
AngularJS实现的输入框字数限制提醒功能示例
2017/10/26 Javascript
vue登录注册及token验证实现代码
2017/12/14 Javascript
在angular 6中使用 less 的实例代码
2018/05/13 Javascript
详解extract-text-webpack-plugin 的使用及安装
2018/06/12 Javascript
微信小程序修改swiper默认指示器样式的实例代码
2018/07/18 Javascript
小程序显示弹窗时禁止下层的内容滚动实现方法
2019/03/20 Javascript
微信小程序动态添加view组件的实例代码
2019/05/23 Javascript
vue实现的封装全局filter并统一管理操作示例
2020/02/02 Javascript
详解Django通用视图中的函数包装
2015/07/21 Python
使用Python生成随机密码的示例分享
2016/02/18 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
python操作excel的方法
2018/08/16 Python
对python实现合并两个排序链表的方法详解
2019/01/23 Python
深入了解Python在HDA中的应用
2019/09/05 Python
CSS3教程:边框属性border的极致应用
2009/04/02 HTML / CSS
德国柯吉澳趣味家居:Koziol
2017/08/24 全球购物
static函数与普通函数有什么区别
2015/12/25 面试题
Ajax的工作原理
2015/12/04 面试题
酒店管理专业毕业生推荐信
2013/11/10 职场文书
教师见习期自我鉴定
2014/04/28 职场文书
反邪教警示教育方案
2014/05/13 职场文书
小学三好学生事迹材料
2014/08/15 职场文书
电工实训报告总结
2014/11/05 职场文书
软件项目经理岗位职责
2015/04/01 职场文书
债务追讨律师函
2015/06/24 职场文书
安装Ruby和 Rails的详细步骤
2022/04/19 Ruby
React自定义hook的方法
2022/06/25 Javascript