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使用正则搜索字符串或文件中的浮点数代码实例
Jul 11 Python
python urllib爬取百度云连接的实例代码
Jun 19 Python
python中的break、continue、exit()、pass全面解析
Aug 05 Python
python+selenium实现163邮箱自动登陆的方法
Dec 31 Python
python实现画圆功能
Jan 25 Python
python 通过麦克风录音 生成wav文件的方法
Jan 09 Python
python使用 zip 同时迭代多个序列示例
Jul 06 Python
Pandas DataFrame中的tuple元素遍历的实现
Oct 23 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
Nov 07 Python
Python如何获取文件指定行的内容
May 27 Python
基于python实现操作redis及消息队列
Aug 27 Python
详解向scrapy中的spider传递参数的几种方法(2种)
Sep 28 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 中文处理函数集合
2008/08/27 PHP
php根据生日计算年龄的方法
2015/07/13 PHP
浅谈PHP错误类型及屏蔽方法
2017/05/27 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
2017/06/10 PHP
php微信开发之图片回复功能
2018/06/14 PHP
JavaScript中访问节点对象的方法有哪些如何使用
2013/09/24 Javascript
jquery文本框中的事件应用以输入邮箱为例
2014/05/06 Javascript
JavaScript针对网页节点的增删改查用法实例
2015/02/02 Javascript
JavaScript将数组转换成CSV格式的方法
2015/03/19 Javascript
Nginx上传文件全部缓存解决方案
2015/08/17 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
2015/12/06 Javascript
15个常用的jquery代码片段
2015/12/19 Javascript
Nodejs学习item【入门手上】
2016/05/05 NodeJs
input获取焦点时底部菜单被顶上来问题的解决办法
2017/01/24 Javascript
利用jQuery实现滑动开关按钮效果(附demo源码下载)
2017/02/07 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
Webpack框架核心概念(知识点整理)
2017/12/22 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
解决layui的radio属性或别的属性没显示出来的问题
2019/09/26 Javascript
[48:41]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
python求crc32值的方法
2014/10/05 Python
深入解析Python设计模式编程中建造者模式的使用
2016/03/02 Python
Python中查看文件名和文件路径
2017/03/31 Python
python hough变换检测直线的实现方法
2019/07/12 Python
Python 实现一个计时器
2020/07/28 Python
梅西酒窖:Macy’s Wine Cellar
2018/01/07 全球购物
大学生文员专业个人求职信范文
2014/01/05 职场文书
黄河象教学反思
2014/02/10 职场文书
地球一小时倡议书
2014/04/15 职场文书
会计系毕业生求职信
2014/05/28 职场文书
企业精神口号
2014/06/11 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
2014年高校辅导员工作总结
2014/12/09 职场文书
大学毕业生个人总结
2015/02/28 职场文书
出纳岗位职责范本
2015/03/31 职场文书
pytorch 权重weight 与 梯度grad 可视化操作
2021/06/05 Python