Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的

作者:xf__mao 时间:2021-10-23 19:00:50 

实验环境:tensorflow版本1.2.0,python2.7

介绍

depthwise_conv2d来源于深度可分离卷积:

Xception: Deep Learning with Depthwise Separable Convolutions


tf.nn.depthwise_conv2d(input,filter,strides,padding,rate=None,name=None,data_format=None)

除去name参数用以指定该操作的name,data_format指定数据格式,与方法有关的一共五个参数:

input:
指需要做卷积的输入图像,要求是一个4维Tensor,具有[batch, height, width, in_channels]这样的shape,具体含义是[训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数]

filter:
相当于CNN中的卷积核,要求是一个4维Tensor,具有[filter_height, filter_width, in_channels, channel_multiplier]这样的shape,具体含义是[卷积核的高度,卷积核的宽度,输入通道数,输出卷积乘子],同理这里第三维in_channels,就是参数value的第四维

strides:
卷积的滑动步长。

padding:
string类型的量,只能是”SAME”,”VALID”其中之一,这个值决定了不同边缘填充方式。

rate:
这个参数的详细解释见【Tensorflow】tf.nn.atrous_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')

来源:https://blog.csdn.net/mao_xiao_feng/article/details/78003476

标签:Tensorflow,tf.nn.depthwise,conv2d,深度卷积
0
投稿

猜你喜欢

  • Python数字图像处理基础直方图详解

    2021-02-12 08:21:55
  • 前端优化,让你的网页显示的更快更流畅

    2009-06-08 13:09:00
  • Python爬虫动态ip代理防止被封的方法

    2022-01-24 00:15:30
  • 用css+Javascript实现扫描线效果图片

    2007-11-08 19:12:00
  • pandas分组聚合详解

    2023-06-28 15:50:25
  • JS将数字转换成三位逗号分隔的样式(示例代码)

    2024-05-02 16:26:59
  • python 处理数字,把大于上限的数字置零实现方法

    2022-11-13 09:20:56
  • golang bufio包中Write方法的深入讲解

    2024-05-08 10:45:31
  • sql中case语句的用法浅谈

    2024-01-28 07:52:37
  • Golang HTTP服务超时控制实现原理分析

    2024-05-08 10:52:16
  • python dlib人脸识别代码实例

    2021-04-05 12:57:33
  • Python可视化单词统计词频统计中文分词的实现步骤

    2023-10-24 17:16:49
  • 详解Python的字符串格式化

    2022-05-01 10:35:52
  • mac系统安装Python3初体验

    2023-11-27 07:33:16
  • Python基础教程之异常处理详解

    2022-06-10 07:52:17
  • Python 中Django验证码功能的实现代码

    2022-05-01 22:55:39
  • asp中日期时间函数介绍

    2013-06-01 20:01:03
  • window.showModalDialog()返回值的学习心得总结

    2024-05-09 10:35:39
  • python基础之元组

    2021-06-28 08:06:24
  • python 格式化输出百分号的方法

    2023-07-17 08:23:27
  • asp之家 网络编程 m.aspxhome.com