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中内置数据类型list,tuple,dict,set的区别和用法
Dec 14 Python
Python程序员面试题 你必须提前准备!
Jan 16 Python
python PyTorch预训练示例
Feb 11 Python
python用户管理系统
Mar 13 Python
详解django.contirb.auth-认证
Jul 16 Python
pytorch动态网络以及权重共享实例
Jan 06 Python
如何使用scrapy中的ItemLoader提取数据
Sep 30 Python
python使用re模块爬取豆瓣Top250电影
Oct 20 Python
Python下载的11种姿势(小结)
Nov 18 Python
python 爬取百度文库并下载(免费文章限定)
Dec 04 Python
python实现大文本文件分割成多个小文件
Apr 20 Python
Anaconda配置各版本Pytorch的实现
Aug 07 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动态创建Flash动画
2006/10/09 PHP
深入解析php模板技术原理【一】
2008/01/10 PHP
php !function_exists("T7FC56270E7A70FA81A5935B72EACBE29"))代码解密
2011/01/07 PHP
基于php实现随机合并数组并排序(原排序)
2015/11/26 PHP
PHP数组内存利用率低和弱类型详细解读
2017/08/10 PHP
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
JS自调用匿名函数具体实现
2014/02/11 Javascript
跟我学Nodejs(二)--- Node.js事件模块
2014/05/21 NodeJs
node.js中的fs.fsyncSync方法使用说明
2014/12/15 Javascript
jQuery+css实现炫目的动态块漂移效果
2016/01/28 Javascript
详解jQuery停止动画——stop()方法的使用
2016/12/14 Javascript
Vue解析带html标签的字符串为dom的实例
2019/11/13 Javascript
微信小程序实现滚动Tab选项卡
2020/11/16 Javascript
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
[06:57]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD 选手采访
2021/03/11 DOTA
Python写的一个简单监控系统
2015/06/19 Python
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
python3+PyQt5实现自定义流体混合窗口部件
2018/04/24 Python
Python实现端口检测的方法
2018/07/24 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
2019/08/10 Python
快速解决docker-py api版本不兼容的问题
2019/08/30 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
python列表删除和多重循环退出原理详解
2020/03/26 Python
利用Python发送邮件或发带附件的邮件
2020/11/12 Python
纯CSS3实现的井字棋游戏
2020/11/25 HTML / CSS
Nuts.com:优质散装,批发坚果、干果和巧克力等
2017/03/21 全球购物
网页设计个人找工作求职信
2013/11/28 职场文书
大四本科生的自我评价
2013/12/30 职场文书
校园创业策划书
2014/01/14 职场文书
爱心捐书活动总结
2014/07/05 职场文书
员工生日活动方案
2014/08/24 职场文书
保证金退回承诺函格式
2015/01/21 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书
新手初学Java List 接口
2021/07/07 Java/Android
Java实现学生管理系统(IO版)
2022/02/24 Java/Android