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 相关文章推荐
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
Jan 19 Python
深入讨论Python函数的参数的默认值所引发的问题的原因
Mar 30 Python
python中Genarator函数用法分析
Apr 08 Python
[原创]pip和pygal的安装实例教程
Dec 07 Python
批量将ppt转换为pdf的Python代码 只要27行!
Feb 26 Python
如何优雅地处理Django中的favicon.ico图标详解
Jul 05 Python
python进行TCP端口扫描的实现
Dec 21 Python
Python 实现文件打包、上传与校验的方法
Feb 13 Python
基于python的selenium两种文件上传操作实现详解
Sep 19 Python
python调用matplotlib模块绘制柱状图
Oct 18 Python
python自动提取文本中的时间(包含中文日期)
Aug 31 Python
Python基础知识学习之类的继承
May 31 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
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
php自动跳转中英文页面
2008/07/29 PHP
JQUERY THICKBOX弹出层插件
2008/08/30 Javascript
简单的js分页脚本
2009/05/21 Javascript
JavaScript中实现块作用域的方法
2010/04/01 Javascript
转换json格式的日期为Javascript对象的函数
2010/07/13 Javascript
StringTemplate遇见jQuery冲突的解决方法
2011/09/22 Javascript
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
JS判断两个时间大小的示例代码
2014/01/28 Javascript
javascript if条件判断方法小结
2014/05/17 Javascript
JavaScript利用正则表达式去除日期中的-
2014/06/09 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
JS中创建函数的三种方式及区别
2016/03/13 Javascript
AngularJS  $modal弹出框实例代码
2016/08/24 Javascript
JavaScript选择排序算法原理与实现方法示例
2018/08/06 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
layui 解决form表单点击无反应的问题
2019/10/25 Javascript
python进程类subprocess的一些操作方法例子
2014/11/22 Python
Python中使用装饰器和元编程实现结构体类实例
2015/01/28 Python
python 实现保存最新的三份文件,其余的都删掉
2019/12/22 Python
基于Python和PyYAML读取yaml配置文件数据
2020/01/13 Python
pandas DataFrame 数据选取,修改,切片的实现
2020/04/24 Python
python3.8动态人脸识别的实现示例
2020/09/21 Python
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
深圳-东方伟业笔试部分
2015/02/11 面试题
路由表示做什么用的?在linux环境中怎么来配置一条默认路由?
2013/06/07 面试题
盛大二次面试题
2016/11/18 面试题
销售自我评价
2013/10/22 职场文书
自动化系在校本科生求职信
2013/10/23 职场文书
公司爱心捐款倡议书
2014/05/14 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
请客吃饭开场白
2015/06/01 职场文书
党小组考察意见
2015/06/02 职场文书
创业项目(超低成本创业项目)
2019/08/16 职场文书
Python图片验证码降噪和8邻域降噪
2021/08/30 Python
十大最强飞行系宝可梦,BUG燕上榜,第二是飞行系王者
2022/03/18 日漫