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 相关文章推荐
利用Django框架中select_related和prefetch_related函数对数据库查询优化
Apr 01 Python
python使用PyGame播放Midi和Mp3文件的方法
Apr 24 Python
在Python中使用全局日志时需要注意的问题
May 06 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
Jan 04 Python
使用django-crontab实现定时任务的示例
Feb 26 Python
python队列queue模块详解
Apr 27 Python
python实现画一颗树和一片森林
Jun 25 Python
12个步骤教你理解Python装饰器
Jul 01 Python
django url到views参数传递的实例
Jul 19 Python
pytorch中的卷积和池化计算方式详解
Jan 03 Python
地图可视化神器kepler.gl python接口的使用方法
Dec 22 Python
在Python中如何使用yield
Jun 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实现信用卡校验位算法THE LUHN MOD-10示例
2014/05/07 PHP
php unicode编码和字符串互转的方法
2020/08/12 PHP
在Laravel5中正确设置文件权限的方法
2019/05/22 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
两种WEB下的模态对话框 (asp.net或js的分别实现)
2009/12/02 Javascript
javascript作用域和闭包使用详解
2014/04/25 Javascript
JavaScript前补零操作实例
2015/03/11 Javascript
JavaScript函数使用的基本教程
2015/06/04 Javascript
Js利用Canvas实现图片压缩功能
2017/09/13 Javascript
详细分析jsonp的原理和实现方式
2017/11/20 Javascript
浅谈微信页面入口文件被缓存解决方案
2018/09/29 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
2018/09/30 Javascript
Vue中的transition封装组件的实现方法
2019/08/13 Javascript
js实现计时器秒表功能
2019/12/16 Javascript
JS实现打字游戏
2019/12/17 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
2021/03/01 Javascript
[01:29]2014DOTA2展望TI 剑指西雅图DK战队专访
2014/06/30 DOTA
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
python开发之函数定义实例分析
2015/11/12 Python
机器学习python实战之手写数字识别
2017/11/01 Python
sublime python3 输入换行不结束的方法
2018/04/19 Python
在python 中实现运行多条shell命令
2019/01/07 Python
浅析Python 引号、注释、字符串
2019/07/25 Python
Python3 io文本及原始流I/O工具用法详解
2020/03/23 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
2020/11/30 Python
全面总结使用CSS实现水平垂直居中效果的方法
2016/03/10 HTML / CSS
DNA基因检测和分析:23andMe
2019/05/01 全球购物
《翻越远方的大山》教学反思
2014/04/13 职场文书
综合实践活动总结
2014/05/05 职场文书
推广普通话演讲稿
2014/05/23 职场文书
运动会的口号
2014/06/09 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
逃出克隆岛观后感
2015/06/09 职场文书
2015年物业公司保洁工作总结
2015/10/22 职场文书
vue @ ~ 相对路径 路径别名设置方式
2022/06/05 Vue.js
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技