首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

TensorFlow 1.5 中的扩展卷积支持

TensorFlow 1.5.0 已经 release,笔者在将 1.4 代码移植到 1.5 时,发现了一些 API 变化,经查阅官网文档,写了简单测试代码,记录于本文,有兴趣的童鞋可以深入研究下。

TensorFlow 1.5.0 相比 1.4.x 大的变化不多,主要是增加了对 CUDA 9、cuDNN 7 的支持,本公众号之前的文章《Nvidia Jetson TX2 上编译安装 TensorFlow r1.5》已经介绍过搭建环境的方法,本文使用的环境保持不变。

使用 3x3 卷积核 ,输入特征图 5x5,无 dilations,无 strides,padding = 'VALID',数据格式采用默认的 'NHWC'(两种不同格式区别参考《TensorFlow API 中 NCHW 与 NHWC 的区别》)。测试代码如下:

运行结果:(1, 3, 3, 16),即输出特征图空间尺寸为 3x3,通道数目为 16。

padding 模式为 'VALID' 时,卷积核在输入特征图上滑动时,只覆盖有效像素,不会超出特征图边界,如图所示(黄色为输入特征图,蓝色为卷积核):

对应输出特征图位置 (0, 0)

对应输出特征图位置 (0, 1)

对应输出特征图位置 (0, 2)

………………

对应输出特征图位置 (2, 2)

查阅官网 API 手册【2】,可以看到 dilations 参数说明如下:

: An optional list of . Defaults to . 1-D tensor of length 4. The dilation factor for each dimension of . If set to k > 1, there will be k-1 skipped cells between each filter element on that dimension. The dimension order is determined by the value of , see above for details. Dilations in the batch and depth dimensions must be 1.

为了测试扩展卷积,将前面代码改为:

运行结果:(1, 1, 1, 16),即输出空间尺寸为 1x1,通道数为 16。使用 dilations = [1, 2, 2, 1] 意义是将原先 3x3 卷积核在特征图上先做“扩展”,相邻两个权值间距为 2 个像素(或说间隔 2-1 = 1 个像素),再进行滑动,由于 padding 模式仍为 'VALID',扩展后的卷积核仍然不能超出输入特征图的边界。具体如下图所示:

经过扩展的卷积核,可以覆盖 5x5 输入特征图的范围,即“感受野”(Receptive Field)为 5x5。

虽然我们也可以使用 5x5 卷积核实现相同的感受野,但扩展卷积显然更节省计算量和模型尺寸,在嵌入式设备上部署时可以降低处理延迟和设备功耗。

参考资料

【1】 TensorFlow 1.5.0 Release Notes:https://github.com/tensorflow/tensorflow/releases

【2】 https://www.tensorflow.org/api_docs/python/tf/nn/conv2d

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180128G0MX8W00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券