tf.contrib.layers.separable_conv2d的操作数

时间:2019-04-17 18:55:00

标签: tensorflow machine-learning conv-neural-network lstm

我正在阅读CVPR2018的论文Mobile Video Object Detection with Temporally-Aware Feature Maps,以及已发布的代码https://github.com/tensorflow/models/tree/master/research/lstm_object_detection

现在,我在本文中遇到等式(4)的问题:瓶颈lstm的成本为DK ^ 2 *(M + N)* DF ^ 2 +(M + N)* N * DF ^ 2 + 4(DK ^ 2 * N * DN ^ 2 + N ^ 2 * DF ^ 2)

当我阅读源代码lstm/lstm_cells.py(118) 时,我发现使用两个连续的tf.contrib.layers.seperable_conv2d来构成本文所述的bottlenek-lstm。

我对前两个术语没有疑问,但是对于第三术语,我认为应该是(DK ^ 2 * N * D2 + 4 * N ^ 2 * DF ^ 2)。也就是说,系数4仅应在第三项中应用于后者,因为tf.contrib.layers.separable_conv2d由深度conv和点向conv组成,而深度conv与输出通道无关。 / strong>

我想念什么吗?还是写在纸上不正确?

对于可分离卷积的计算,我遵循MobileNet paper公式(5)。

用于瓶颈lstm计算的选定代码:

bottleneck = tf.contrib.layers.separable_conv2d(
         tf.concat([inputs, h], 3),
         self._num_units,
         self._filter_size,
         depth_multiplier=1,
         activation_fn=self._activation,
         normalizer_fn=None,
         scope='bottleneck')

if self._viz_gates:
       slim.summaries.add_histogram_summary(bottleneck, 'bottleneck')

concat = tf.contrib.layers.separable_conv2d(
         bottleneck,
         4 * self._num_units,
         self._filter_size,
         depth_multiplier=1,
         activation_fn=None,
         normalizer_fn=None,
         scope='gates')

为了保持一致性,让

self._filter_size=[Dk,Dk]
self._num_units = N
inputs shape is [batch, DF, DF, M]
h shape is [batch, DF, DF, N]

0 个答案:

没有答案