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 相关文章推荐
sqlalchemy对象转dict的示例
Apr 22 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
Jul 08 Python
利用Python自动监控网站并发送邮件告警的方法
Aug 24 Python
利用python程序帮大家清理windows垃圾
Jan 15 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
Jul 13 Python
python实现超简单的视频对象提取功能
Jun 04 Python
flask框架实现连接sqlite3数据库的方法分析
Jul 16 Python
python实现猜拳小游戏
Apr 05 Python
python3 selenium自动化 下拉框定位的例子
Aug 23 Python
详解Python修复遥感影像条带的两种方式
Feb 23 Python
通过实例简单了解python yield使用方法
Aug 06 Python
python基于turtle绘制几何图形
Jun 15 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
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
2017/02/07 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
prototype 中文参数乱码解决方案
2009/11/09 Javascript
js模拟C#中List的简单实例
2014/03/06 Javascript
Jquery通过JSON字符串创建JSON对象
2014/08/24 Javascript
6种javascript显示当前系统时间代码
2015/12/01 Javascript
jQuery实现的可编辑表格完整实例
2016/06/20 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
vue.js通过路由实现经典的三栏布局实例代码
2018/07/08 Javascript
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
python排序方法实例分析
2015/04/30 Python
Python栈类实例分析
2015/06/15 Python
python数字图像处理之高级滤波代码详解
2017/11/23 Python
Python Numpy 数组的初始化和基本操作
2018/03/13 Python
python实现Dijkstra静态寻路算法
2019/01/17 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
Python多线程thread及模块使用实例
2020/04/28 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
浅谈Python中的生成器和迭代器
2020/06/19 Python
CSS3中的opacity属性使用教程
2015/08/19 HTML / CSS
解析浏览器的一些“滚动”行为鉴赏
2019/09/16 HTML / CSS
Ejb技术面试题
2015/04/29 面试题
汽车驾驶求职信
2013/10/25 职场文书
市场营销工作计划书
2014/05/06 职场文书
党校个人总结
2015/03/04 职场文书
雾霾停课通知
2015/04/24 职场文书
中学生勤俭节约倡议书
2015/04/29 职场文书
公司车辆维修管理制度
2015/08/05 职场文书
校园音乐节目广播稿
2015/08/19 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书
golang中切片copy复制和等号复制的区别介绍
2021/04/27 Golang
浅谈Python响应式类库RxPy
2021/06/14 Python
spring项目中切面及AOP的使用方法
2021/06/26 Java/Android
tomcat下部署jenkins的方法
2022/05/06 Servers