#tensorflow #machine-learning #conv-neural-network #lstm
#tensorflow #машинное обучение #conv-нейронная сеть #lstm
Вопрос:
Я читаю документ об обнаружении мобильных видеообъектов с помощью временных карт объектов от CVPR2018, а также выпущенный код: 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 по глубине не имеют ничего общего с выходными каналами.
Я что-то пропустил? Или это неправильно написано в документе?
Для вычисления разделяемой свертки я следую уравнению бумаги MobileNet (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]