使用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远程登录代码
Apr 29 Python
Python如何实现守护进程的方法示例
Feb 08 Python
Django基础之Model操作步骤(介绍)
May 27 Python
pytorch + visdom CNN处理自建图片数据集的方法
Jun 04 Python
详解js文件通过python访问数据库方法
Mar 03 Python
使用Python实现毫秒级抢单功能
Jun 06 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
Aug 24 Python
Python3实现发送邮件和发送短信验证码功能
Jan 07 Python
基于python连接oracle导并出数据文件
Apr 28 Python
Python几种常见算法汇总
Jun 02 Python
Python调用JavaScript代码的方法
Oct 27 Python
浅谈Python中的正则表达式
Jun 28 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/11/11 PHP
php获取从html表单传递数组的方法
2015/03/20 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
js 页面执行时间计算代码
2009/03/04 Javascript
jquery下利用jsonp跨域访问实现方法
2010/07/29 Javascript
div拖拽插件——JQ.MoveBox.js(自制JQ插件)
2013/05/17 Javascript
JavaScript数据结构和算法之图和图算法
2015/02/11 Javascript
Jquery中使用show()与hide()方法动画显示和隐藏图片
2015/10/08 Javascript
基于JS实现的笛卡尔乘积之商品发布
2016/05/13 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
2016/06/20 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
2016/11/24 Javascript
jquery tmpl模板(实例讲解)
2017/09/02 jQuery
JS伪继承prototype实现方法示例
2018/06/20 Javascript
node.js到底要不要加分号浅析
2018/07/11 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
2018/12/11 Javascript
基于vue实现探探滑动组件功能
2020/05/29 Javascript
Python中SOAP项目的介绍及其在web开发中的应用
2015/04/14 Python
python3操作mysql数据库的方法
2017/06/23 Python
Python迭代器定义与简单用法分析
2018/04/30 Python
Python将文本去空格并保存到txt文件中的实例
2018/07/24 Python
python字符串替换re.sub()方法解析
2019/09/18 Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
2019/09/30 Python
python框架flask表单实现详解
2019/11/04 Python
python集合删除多种方法详解
2020/02/10 Python
美国皮靴公司自1863年:The Frye Company
2016/11/30 全球购物
阿里旅行:飞猪
2017/01/05 全球购物
捷克体育用品购物网站:D-sport
2017/12/28 全球购物
Janie and Jack美国官网:GAP旗下的高档童装品牌
2019/09/09 全球购物
奥林匹亚体育:Olympia Sports
2020/12/30 全球购物
传播学毕业生求职信
2013/10/11 职场文书
师范生个人推荐信
2013/11/29 职场文书
竞选大队长演讲稿
2014/04/29 职场文书
2014大学生学生会工作总结
2014/12/19 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书
JavaWeb 入门:Hello Servlet
2021/07/16 Java/Android
vscode内网访问服务器的方法
2022/06/28 Servers