使用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打印scrapy蜘蛛抓取树结构的方法
Apr 08 Python
Python正则表达式教程之一:基础篇
Mar 02 Python
python简单图片操作:打开\显示\保存图像方法介绍
Nov 23 Python
python机器学习案例教程——K最近邻算法的实现
Dec 28 Python
Python中pandas模块DataFrame创建方法示例
Jun 20 Python
浅析python3中的os.path.dirname(__file__)的使用
Aug 30 Python
对python 读取线的shp文件实例详解
Dec 22 Python
Python 绘制酷炫的三维图步骤详解
Jul 12 Python
python爬虫 基于requests模块的get请求实现详解
Aug 20 Python
解决pycharm上的jupyter notebook端口被占用问题
Dec 17 Python
pycharm工具连接mysql数据库失败问题
Apr 01 Python
pycharm 添加解释器的方法步骤
Aug 31 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
Breeze 文章管理系统 v1.0.0正式发布
2006/12/14 PHP
php递归使用示例(php递归函数)
2014/02/14 PHP
php中 ob_start等函数截取标准输出的方法
2015/06/22 PHP
PHP flush 函数使用注意事项
2016/08/26 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
JQuery的html(data)方法与<script>脚本块的解决方法
2010/03/09 Javascript
高性能WEB开发 flush让页面分块,逐步呈现 flush让页面分块,逐步呈现
2010/06/19 Javascript
js arguments对象应用介绍
2012/11/28 Javascript
jquery创建一个ajax关键词数据搜索实现思路
2013/02/26 Javascript
JS实现字体选色板实例代码
2013/11/20 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
JavaScript适配器模式详解
2017/10/19 Javascript
vue组件间通信子与父详解(二)
2017/11/07 Javascript
KOA+egg.js集成kafka消息队列的示例
2018/11/09 Javascript
Easyui 关闭jquery-easui tab标签页前触发事件的解决方法
2019/04/28 jQuery
详解vue-cli3开发Chrome插件实践
2019/05/29 Javascript
微信小程序实现pdf、word等格式文件上传的方法
2019/09/10 Javascript
使用layui前端框架弹出form表单以及提交的示例
2019/10/25 Javascript
vue和小程序项目中使用iconfont的方法
2020/05/19 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
Python中列表、字典、元组数据结构的简单学习笔记
2016/03/20 Python
Python程序中的观察者模式结构编写示例
2016/05/27 Python
SQLite3中文编码 Python的实现
2017/01/11 Python
基于python内置函数与匿名函数详解
2018/01/09 Python
Pycharm保存不能自动同步到远程服务器的解决方法
2019/06/27 Python
python basemap 画出经纬度并标定的实例
2019/07/09 Python
HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能
2018/01/03 HTML / CSS
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
.NET面试10题
2014/02/24 面试题
建筑结构施工专业推荐信
2014/02/21 职场文书
2014预防青少年违法犯罪工作总结
2014/12/10 职场文书
老公保证书怎么写
2015/02/26 职场文书
工作简报格式范文
2015/07/21 职场文书
Pytest allure 命令行参数的使用
2021/04/18 Python
「月刊Action」2022年5月号封面公开
2022/03/21 日漫
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电