使用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缩进和冒号详解
Jun 01 Python
利用django如何解析用户上传的excel文件
Jul 24 Python
python中的break、continue、exit()、pass全面解析
Aug 05 Python
django模板语法学习之include示例详解
Dec 17 Python
python删除字符串中指定字符的方法
Aug 13 Python
python利用JMeter测试Tornado的多线程
Jan 12 Python
Tensorflow实现在训练好的模型上进行测试
Jan 20 Python
python matplotlib包图像配色方案分享
Mar 14 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
Jun 04 Python
Python虚拟环境库virtualenvwrapper安装及使用
Jun 17 Python
pycharm 2020 1.1的安装流程
Sep 29 Python
人工智能深度学习OpenAI baselines的使用方法
May 20 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
解析Win7 XAMPP apache无法启动的问题
2013/06/26 PHP
php读取csv数据保存到数组的方法
2015/01/03 PHP
php实现TCP端口检测的方法
2015/04/01 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
JavaScript 无符号右移运算符
2009/04/17 Javascript
javascript 最常用的10个自定义函数[推荐]
2009/12/26 Javascript
javascript开发技术大全 第4章 直接量与字符集
2011/07/03 Javascript
YUI Compressor压缩JavaScript原理及微优化
2013/01/07 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
JS实现的N多简单无缝滚动代码(包含图文效果)
2015/11/06 Javascript
基于Javascript实现弹出页面效果
2016/01/01 Javascript
Node.js 应用跑得更快 10 个技巧
2016/04/03 Javascript
vue jsx 使用指南及vue.js 使用jsx语法的方法
2017/11/11 Javascript
浅谈Vuex的this.$store.commit和在Vue项目中引用公共方法
2020/07/24 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
[47:12]TFT vs Secret Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
[47:42]完美世界DOTA2联赛PWL S2 GXR vs Ink 第一场 11.19
2020/11/20 DOTA
python使用win32com库播放mp3文件的方法
2015/05/30 Python
使用matlab或python将txt文件转为excel表格
2019/11/01 Python
Python新手学习标准库模块命名
2020/05/29 Python
CSS3 制作旋转的大风车(充满童年回忆)
2013/01/30 HTML / CSS
农业开发项目建议书
2014/05/16 职场文书
在校大学生自我评价范文
2014/09/12 职场文书
2014入党积极分子批评与自我批评思想汇报
2014/09/20 职场文书
银行贷款委托书范本
2014/10/11 职场文书
办公室文员岗位职责
2015/02/04 职场文书
开国大典观后感
2015/06/04 职场文书
2016春季运动会前导词
2015/11/25 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
mongodb的安装和开机自启动详细讲解
2021/08/02 MongoDB
HTML+JS实现在线朗读器
2022/02/15 Javascript
postgreSQL数据库基础知识介绍
2022/04/12 PostgreSQL
python库Tsmoothie模块数据平滑化异常点抓取
2022/06/10 Python
table设置超出部分隐藏,鼠标移上去显示全部内容的方法
2022/12/24 HTML / CSS