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正则表达式操作指南(re使用)
Sep 06 Python
Python获取脚本所在目录的正确方法
Apr 15 Python
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
Apr 25 Python
Python中的二叉树查找算法模块使用指南
Jul 04 Python
Python+MongoDB自增键值的简单实现
Nov 04 Python
python生成excel的实例代码
Nov 08 Python
Python编程argparse入门浅析
Feb 07 Python
python实现逢七拍腿小游戏的思路详解
May 26 Python
Python模拟伯努利试验和二项分布代码实例
May 27 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
Sep 18 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
Nov 13 Python
如何用Python进行时间序列分解和预测
Mar 01 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
在smarty模板中使用PHP函数的方法
2011/04/23 PHP
PHP调用.NET的WebService 简单实例
2015/03/27 PHP
6个超实用的PHP代码片段
2015/08/10 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
2015/08/31 PHP
Jquery事件的连接使用示例
2013/06/18 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
浅析tr的隐藏和显示问题
2014/03/05 Javascript
javacript使用break内层跳出外层循环分析
2015/01/12 Javascript
JavaScript数组合并的多种方法
2016/05/22 Javascript
10个经典的网页鼠标特效代码
2018/01/09 Javascript
angular4 共享服务在多个组件中数据通信的示例
2018/03/30 Javascript
webpack4 处理CSS的方法示例
2018/09/03 Javascript
vue中过滤器filter的讲解
2019/01/21 Javascript
node学习笔记之读写文件与开启第一个web服务器操作示例
2019/05/29 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
2020/05/13 Javascript
详解React 条件渲染
2020/07/08 Javascript
javascript使用正则表达式实现注册登入校验
2020/09/23 Javascript
在Vue中使用CSS3实现内容无缝滚动的示例代码
2020/11/27 Vue.js
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
在Django中进行用户注册和邮箱验证的方法
2016/05/09 Python
python实现报表自动化详解
2017/11/16 Python
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
Django之创建引擎索引报错及解决详解
2019/07/17 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
2020/11/11 Python
python 实现Harris角点检测算法
2020/12/11 Python
Lancome兰蔻官方旗舰店:来自法国的世界知名美妆品牌
2018/06/14 全球购物
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
电子商务专业学生的自我鉴定
2013/11/28 职场文书
早读迟到检讨书
2014/01/24 职场文书
承认错误的检讨书
2014/01/30 职场文书
计算机学生求职信范文
2014/01/30 职场文书
物理系毕业生自荐书
2014/06/13 职场文书
2014年幼儿园重阳节活动方案
2014/09/16 职场文书
小学感恩节活动策划方案
2014/10/06 职场文书
2014年幼儿园教研工作总结
2014/12/04 职场文书
SpringBoot详解整合Redis缓存方法
2022/07/15 Java/Android