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的Django框架中的select_related函数对QuerySet 查询的优化
Apr 01 Python
在Python中使用PIL模块对图片进行高斯模糊处理的教程
May 05 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
Apr 18 Python
python3 kmp 字符串匹配的方法
Jul 07 Python
对Python Pexpect 模块的使用说明详解
Feb 14 Python
python中threading开启关闭线程操作
May 02 Python
浅谈pandas dataframe对除数是零的处理
Jul 20 Python
Python random模块的使用示例
Oct 10 Python
python 实现端口扫描工具
Dec 18 Python
python palywright库基本使用
Jan 21 Python
Python的flask接收前台的ajax的post数据和get数据的方法
Apr 12 Python
基于Python实现股票收益率分析
Apr 02 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
第十节 抽象方法和抽象类 [10]
2006/10/09 PHP
9段PHP实用功能的代码推荐
2014/10/14 PHP
js代码实现微博导航栏
2015/07/30 PHP
PHP的PDO错误与错误处理
2019/01/27 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
2019/06/06 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
2010/06/10 Javascript
JavaScript常用全局属性与方法记录积累
2013/07/03 Javascript
使用Jquery实现点击文字后变成文本框且可修改
2013/09/21 Javascript
一个获取第n个元素节点的js函数
2014/09/02 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
jquery实现的Banner广告收缩效果代码
2015/09/02 Javascript
封装获取dom元素的简单实例
2016/07/08 Javascript
js转html实体的方法
2016/09/27 Javascript
Json按某个键的值进行排序
2016/12/22 Javascript
原生JS实现图片轮播效果
2016/12/26 Javascript
AngularJS select设置默认值的实现方法
2017/08/25 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
js中getter和setter用法实例分析
2018/08/14 Javascript
原生js实现淘宝放大镜效果
2020/10/28 Javascript
微信小程序 wepy框架与iview-weapp的用法详解
2019/04/10 Javascript
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
在Python的web框架中配置app的教程
2015/04/30 Python
Python实现读取及写入csv文件的方法示例
2018/01/12 Python
浅析Python3爬虫登录模拟
2018/02/07 Python
Python使用re模块实现信息筛选的方法
2018/04/29 Python
对python中的try、except、finally 执行顺序详解
2019/02/18 Python
Python使用dict.fromkeys()快速生成一个字典示例
2019/04/24 Python
Python requests设置代理的方法步骤
2020/02/23 Python
Python爬虫爬取、解析数据操作示例
2020/03/27 Python
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
英国鞋类及配饰零售商:Kurt Geiger
2017/02/04 全球购物
MBA推荐信怎么写
2015/03/25 职场文书
2015年电厂工作总结范文
2015/05/13 职场文书
刑事法律意见书
2015/06/04 职场文书
单位工作证明范本
2015/06/15 职场文书