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计算最小优先级队列代码分享
Dec 18 Python
Python 中的with关键字使用详解
Sep 11 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
May 29 Python
pycharm 在windows上编辑代码用linux执行配置的方法
Oct 27 Python
Python3实现获取图片文字里中文的方法分析
Dec 13 Python
python实现杨氏矩阵查找
Mar 02 Python
python实现nao机器人手臂动作控制
Apr 29 Python
python中open函数的基本用法示例
Sep 07 Python
python读取配置文件方式(ini、yaml、xml)
Apr 09 Python
Python HTMLTestRunner可视化报告实现过程解析
Apr 10 Python
Python 实现自动登录+点击+滑动验证功能
Jun 10 Python
Keras预训练的ImageNet模型实现分类操作
Jul 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注入实例
2006/10/09 PHP
PHP 中的一些经验积累
2006/10/09 PHP
PHP编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
php中url传递中文字符,特殊危险字符的解决方法
2013/08/17 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
thinkPHP框架中执行事务的方法示例
2018/05/31 PHP
PHP parse_ini_file函数的应用与扩展操作示例
2019/01/07 PHP
通过jquery还原含有rowspan、colspan的table的实现方法
2012/02/10 Javascript
基于jquery的固定表头和列头的代码
2012/05/03 Javascript
基于jquery DOM写的类似微博发布的效果
2012/10/20 Javascript
jquery 列表双向选择器之改进版
2013/08/09 Javascript
Flexigrid在IE下不显示数据的有效处理方法
2014/09/04 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
jQuery根据用户电脑是mac还是pc加载对应样式的方法
2015/06/26 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
浅谈Javascript数据属性与访问器属性
2016/07/26 Javascript
微信小程序登录态控制深入分析
2017/04/12 Javascript
jQuery+C#实现参数RSA加密传输功能【附jsencrypt.js下载】
2017/06/26 jQuery
Vue 表情包输入组件的实现代码
2019/01/21 Javascript
Vue插件从封装到发布的完整步骤记录
2019/02/28 Javascript
详解Vue.js和layui日期控件冲突问题解决办法
2019/07/25 Javascript
可拖拽组件slider.js使用方法详解
2020/12/04 Javascript
[02:58]魔廷新尊——痛苦女王至宝语音台词节选
2020/06/14 DOTA
简单介绍Python中的readline()方法的使用
2015/05/24 Python
Django csrf 两种方法设置form的实例
2019/02/03 Python
解决python文件双击运行秒退的问题
2019/06/24 Python
python连接PostgreSQL数据库的过程详解
2019/09/18 Python
python 实现简单的计算器(gui界面)
2020/11/11 Python
利用纯html5绘制出来的一款非常漂亮的时钟
2015/01/04 HTML / CSS
印度尼西亚综合购物网站:Lazada印尼
2016/09/07 全球购物
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
岗位职责的含义
2013/11/17 职场文书
文案策划求职信
2014/03/18 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
python实现Nao机器人的单目测距
2021/09/04 Python
10大幻兽系恶魔果实 蝙蝠果实上榜,第一自愈能力强
2022/03/18 日漫