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 相关文章推荐
Windows系统下安装Python的SSH模块教程
Feb 05 Python
Python2/3中urllib库的一些常见用法
Dec 19 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
Feb 06 Python
python进行文件对比的方法
Dec 24 Python
在numpy矩阵中令小于0的元素改为0的实例
Jan 26 Python
学生信息管理系统Python面向对象版
Jan 30 Python
python实现AES加密与解密
Mar 28 Python
python接口自动化(十六)--参数关联接口后传(详解)
Apr 16 Python
Django模型修改及数据迁移实现解析
Aug 01 Python
Python timeit模块的使用实践
Jan 13 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
Apr 22 Python
详解python的xlwings库读写excel操作总结
Feb 26 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
phpcms模块开发之swfupload的使用介绍
2013/04/28 PHP
PHP之密码加密的几种方式
2015/07/29 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
Laravel中前端js上传图片到七牛云的示例代码
2017/09/04 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
Javascript 继承机制实例
2009/08/12 Javascript
关于this和self的使用说明
2010/08/01 Javascript
javascript中的prototype属性使用说明(函数功能扩展)
2010/08/16 Javascript
理解Javascript_09_Function与Object
2010/10/16 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
JavaScript设置表单上传时文件个数的方法
2015/08/11 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
学习Angularjs分页指令
2016/07/01 Javascript
JavaScript实现经典排序算法之插入排序
2016/12/28 Javascript
javascript 正则表达式去空行方法
2017/01/24 Javascript
Node.js安装配置图文教程
2017/05/10 Javascript
webpack4的迁移的使用方法
2018/05/25 Javascript
7个好用的JavaScript技巧分享(译)
2019/05/07 Javascript
javascript实现遮罩层动态效果实例
2019/05/14 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
Python采用socket模拟TCP通讯的实现方法
2014/11/19 Python
Python中subprocess模块用法实例详解
2015/05/20 Python
python 查找文件名包含指定字符串的方法
2018/06/05 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
2018/10/14 Python
Django如何简单快速实现PUT、DELETE方法
2019/07/24 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
2019/08/16 Python
python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例
2020/02/28 Python
python sitk.show()与imageJ结合使用常见的问题
2020/04/20 Python
Python 保存加载mat格式文件的示例代码
2020/08/04 Python
Restful_framework视图组件代码实例解析
2020/11/17 Python
canvas线条的属性详解
2018/03/27 HTML / CSS
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
业务员岗位职责
2013/11/16 职场文书
酒吧总经理岗位职责
2013/12/10 职场文书
初中中等生评语
2014/12/29 职场文书