Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的


Posted in Python onApril 20, 2020

实验环境:tensorflow版本1.2.0,python2.7

介绍

depthwise_conv2d来源于深度可分离卷积:

结果返回一个Tensor,shape为[batch, out_height, out_width, in_channels * channel_multiplier],注意这里输出通道变成了in_channels * channel_multiplier

实验

为了形象的展示depthwise_conv2d,我们必须要建立自定义的输入图像和卷积核

img1 = tf.constant(value=[[[[1],[2],[3],[4]],[[1],[2],[3],[4]],[[1],[2],[3],[4]],[[1],[2],[3],[4]]]],dtype=tf.float32)
img2 = tf.constant(value=[[[[1],[1],[1],[1]],[[1],[1],[1],[1]],[[1],[1],[1],[1]],[[1],[1],[1],[1]]]],dtype=tf.float32)
img = tf.concat(values=[img1,img2],axis=3)
filter1 = tf.constant(value=0, shape=[3,3,1,1],dtype=tf.float32)
filter2 = tf.constant(value=1, shape=[3,3,1,1],dtype=tf.float32)
filter3 = tf.constant(value=2, shape=[3,3,1,1],dtype=tf.float32)
filter4 = tf.constant(value=3, shape=[3,3,1,1],dtype=tf.float32)
filter_out1 = tf.concat(values=[filter1,filter2],axis=2)
filter_out2 = tf.concat(values=[filter3,filter4],axis=2)
filter = tf.concat(values=[filter_out1,filter_out2],axis=3)

建立好了img和filter,就可以做卷积了

out_img = tf.nn.conv2d(input=img, filter=filter, strides=[1,1,1,1], padding='VALID')

好了,用一张图来详细展示这个过程

Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的 

Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的

这是普通的卷积过程,我们再来看深度卷积。

out_img = tf.nn.depthwise_conv2d(input=img, filter=filter, strides=[1,1,1,1], rate=[1,1], padding='VALID')

Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的 

Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的

现在我们可以形象的解释一下depthwise_conv2d卷积了。看普通的卷积,我们对卷积核每一个out_channel的两个通道分别和输入的两个通道做卷积相加,得到feature map的一个channel,而depthwise_conv2d卷积,我们对每一个对应的in_channel,分别卷积生成两个out_channel,所以获得的feature map的通道数量可以用in_channel* channel_multiplier来表达,这个channel_multiplier,就可以理解为卷积核的第四维。

代码清单

import tensorflow as tf


img1 = tf.constant(value=[[[[1],[2],[3],[4]],[[1],[2],[3],[4]],[[1],[2],[3],[4]],[[1],[2],[3],[4]]]],dtype=tf.float32)
img2 = tf.constant(value=[[[[1],[1],[1],[1]],[[1],[1],[1],[1]],[[1],[1],[1],[1]],[[1],[1],[1],[1]]]],dtype=tf.float32)
img = tf.concat(values=[img1,img2],axis=3)
filter1 = tf.constant(value=0, shape=[3,3,1,1],dtype=tf.float32)
filter2 = tf.constant(value=1, shape=[3,3,1,1],dtype=tf.float32)
filter3 = tf.constant(value=2, shape=[3,3,1,1],dtype=tf.float32)
filter4 = tf.constant(value=3, shape=[3,3,1,1],dtype=tf.float32)
filter_out1 = tf.concat(values=[filter1,filter2],axis=2)
filter_out2 = tf.concat(values=[filter3,filter4],axis=2)
filter = tf.concat(values=[filter_out1,filter_out2],axis=3)

out_img = tf.nn.depthwise_conv2d(input=img, filter=filter, strides=[1,1,1,1], rate=[1,1], padding='VALID')

输出:

rate=1, VALID mode result:
[[[[ 0. 36. 9. 27.]
[ 0. 54. 9. 27.]]

[[ 0. 36. 9. 27.]
[ 0. 54. 9. 27.]]]]

到此这篇关于Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的的文章就介绍到这了,更多相关Tensorflow tf.nn.depthwise_conv2d深度卷积内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python urlopen 使用小示例
Sep 06 Python
Python程序中使用SQLAlchemy时出现乱码的解决方案
Apr 24 Python
Python 专题六 局部变量、全局变量global、导入模块变量
Mar 20 Python
python操作MySQL 模拟简单银行转账操作
Sep 27 Python
python 通过类中一个方法获取另一个方法变量的实例
Jan 22 Python
python实现键盘输入的实操方法
Jul 16 Python
pytorch 更改预训练模型网络结构的方法
Aug 19 Python
如何基于python测量代码运行时间
Dec 25 Python
python读取多层嵌套文件夹中的文件实例
Feb 27 Python
python print 格式化输出,动态指定长度的实现
Apr 12 Python
Python中内建模块collections如何使用
May 27 Python
Python批量解压&压缩文件夹的示例代码
Apr 04 Python
解决python脚本中error: unrecognized arguments: True错误
Apr 20 #Python
python argparse传入布尔参数false不生效的解决
Apr 20 #Python
parser.add_argument中的action使用
Apr 20 #Python
Python ArgumentParse的subparser用法说明
Apr 20 #Python
python列表的逆序遍历实现
Apr 20 #Python
python sitk.show()与imageJ结合使用常见的问题
Apr 20 #Python
使用Python对Dicom文件进行读取与写入的实现
Apr 20 #Python
You might like
phpMyAdmin链接MySql错误 个人解决方案
2009/12/28 PHP
php判断页面是否是微信打开的示例(微信打开网页)
2014/04/25 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
PHP如何开启Opcache功能提升程序处理效率
2020/04/27 PHP
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
理解javascript中的严格模式
2016/02/01 Javascript
基于jquery实现即时检查格式是否正确的表单
2016/05/06 Javascript
jquery.validate使用详解
2016/06/02 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
React Native实现简单的登录功能(推荐)
2016/09/19 Javascript
纯JS实现只能输入数字的简单代码
2017/06/21 Javascript
jQuery实现QQ空间汉字转拼音功能示例
2017/07/10 jQuery
JavaScript数据结构之优先队列与循环队列实例详解
2017/10/27 Javascript
基于Vue2.X的路由和钩子函数详解
2018/02/09 Javascript
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
在vue中使用v-bind:class的选项卡方法
2018/09/27 Javascript
ES6 Promise对象概念及用法实例详解
2019/10/15 Javascript
解决vue动态路由异步加载import组件,加载不到module的问题
2020/07/26 Javascript
Python专用方法与迭代机制实例分析
2014/09/15 Python
Python入门教程之运算符与控制流
2016/08/17 Python
Django实现登录随机验证码的示例代码
2018/06/20 Python
将Python字符串生成PDF的实例代码详解
2019/05/17 Python
Django 多对多字段的更新和插入数据实例
2020/03/31 Python
flask开启多线程的具体方法
2020/08/02 Python
详解Python中list[::-1]的几种用法
2020/11/16 Python
CSS3制作酷炫的三维相册效果
2016/07/01 HTML / CSS
英国著名的茶叶品牌:Whittard of Chelsea
2016/09/22 全球购物
GUESS盖尔斯法国官网:美国时尚品牌
2016/09/23 全球购物
历史系毕业生自荐信
2013/10/28 职场文书
服务员自我评价
2014/01/25 职场文书
计划生育标语
2014/06/23 职场文书
学习十八大宣传标语
2014/10/09 职场文书
先进党组织事迹材料
2014/12/26 职场文书
办公经费申请报告
2015/05/15 职场文书
2015年小学图书室工作总结
2015/05/18 职场文书