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实现360的字符显示界面
Feb 21 Python
在Python中使用元类的教程
Apr 28 Python
Python安装使用命令行交互模块pexpect的基础教程
May 12 Python
python+pyqt实现右下角弹出框
Oct 26 Python
python实现12306抢票及自动邮件发送提醒付款功能
Mar 08 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
Apr 09 Python
DataFrame 将某列数据转为数组的方法
Apr 13 Python
python3中property使用方法详解
Apr 23 Python
Django框架设置cookies与获取cookies操作详解
May 27 Python
Python叠加两幅栅格图像的实现方法
Jul 05 Python
Python+OpenCV实现将图像转换为二进制格式
Jan 09 Python
Python3 利用face_recognition实现人脸识别的方法
Mar 13 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
yii中widget的用法
2014/12/03 PHP
PHP多文件上传实例
2015/07/09 PHP
javascript OFFICE控件测试代码
2009/12/08 Javascript
28个JS验证函数收集
2010/03/02 Javascript
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
jquer之ajaxQueue简单实现代码
2011/09/15 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
js获取下拉列表的值和元素个数示例
2014/05/07 Javascript
JS获取客户端IP地址、MAC和主机名的7个方法汇总
2014/07/21 Javascript
上传文件返回的json数据会被提示下载问题解决方案
2014/12/03 Javascript
轻松理解Javascript变量的相关问题
2017/01/20 Javascript
分析JS单线程异步io回调的特性
2017/12/01 Javascript
vue2.0 computed 计算list循环后累加值的实例
2018/03/07 Javascript
angularjs 的数据绑定实现原理
2018/07/02 Javascript
15分钟上手vue3.0(小结)
2020/05/20 Javascript
详解如何使用React Hooks请求数据并渲染
2020/10/18 Javascript
vue.js实现点击图标放大离开时缩小的代码
2021/01/27 Vue.js
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
2021/02/15 Javascript
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
python中seaborn包常用图形使用详解
2019/11/25 Python
pytorch点乘与叉乘示例讲解
2019/12/27 Python
python实现图片,视频人脸识别(opencv版)
2020/11/18 Python
华为慧通笔试题
2016/04/22 面试题
什么是URL
2015/12/13 面试题
人力资源管理专业应届生求职信
2013/09/28 职场文书
安全大检查反思材料
2014/01/31 职场文书
养生餐厅创业计划书范文
2014/03/26 职场文书
干部个人考察材料
2014/12/24 职场文书
党小组鉴定意见
2015/06/02 职场文书
丧事酒宴答谢词
2015/09/30 职场文书
python爬虫请求库httpx和parsel解析库的使用测评
2021/05/10 Python
手把手教你怎么用Python实现zip文件密码的破解
2021/05/27 Python
Python必备技巧之字符数据操作详解
2022/03/23 Python
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL
python数字图像处理:图像的绘制
2022/06/28 Python