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实现的检测网站挂马程序
Nov 30 Python
使用Python编写类UNIX系统的命令行工具的教程
Apr 15 Python
Python中的列表生成式与生成器学习教程
Mar 13 Python
python中函数总结之装饰器闭包详解
Jun 12 Python
python简单图片操作:打开\显示\保存图像方法介绍
Nov 23 Python
Python实现发送与接收邮件的方法详解
Mar 28 Python
Python基于生成器迭代实现的八皇后问题示例
May 23 Python
matplotlib savefig 保存图片大小的实例
May 24 Python
python opencv实现运动检测
Jul 10 Python
django中嵌套的try-except实例
May 21 Python
Python字符串三种格式化输出
Sep 17 Python
Python实战之疫苗研发情况可视化
May 18 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
PHP daddslashes 使用方法介绍
2012/10/26 PHP
linux命令之调试工具strace的深入分析
2013/06/03 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
2017/11/03 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2007/02/15 Javascript
js控制div及网页相关属性的代码
2009/12/19 Javascript
JavaScript几种形式的树结构菜单
2010/05/10 Javascript
非主流的textarea自增长实现js代码
2011/12/20 Javascript
jquery validate poshytip 自定义样式
2012/11/26 Javascript
js获取日期:昨天今天和明天、后天
2014/06/11 Javascript
手机开发必备技巧:javascript及CSS功能代码分享
2015/05/25 Javascript
require.js的用法详解
2015/10/20 Javascript
基于JavaScript将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)
2015/12/28 Javascript
js实现带农历和八字等信息的日历特效
2016/05/16 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
2016/12/16 Javascript
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
2017/01/04 Javascript
JavaScript前端实现压缩图片功能
2020/03/06 Javascript
javascript设计模式 ? 享元模式原理与用法实例分析
2020/04/15 Javascript
typescript配置alias的详细步骤
2020/08/12 Javascript
Python常见文件操作的函数示例代码
2011/11/15 Python
python字符串中的单双引
2017/02/16 Python
python虚拟环境迁移方法
2019/01/03 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
python绘制汉诺塔
2021/03/01 Python
VLAN和VPN有什么区别?分别实现在OSI的第几层?
2014/12/23 面试题
单位创先争优活动方案
2014/01/26 职场文书
社会实践评语
2014/04/28 职场文书
兴趣小组活动总结
2014/05/05 职场文书
门店业绩提升方案
2014/06/08 职场文书
金融系毕业生自荐书
2014/07/08 职场文书
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
2014年社区宣传工作总结
2014/12/02 职场文书
小区环境卫生倡议书
2015/04/29 职场文书
2016年“5.12”护士节致辞
2015/07/31 职场文书
微信小程序scroll-view不能左右滑动问题的解决方法
2021/07/09 Javascript
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android