Реализация остаточного блока в тензорном потоке

Я пытаюсь реализовать остаточную единицу Resnet v1 и v2 на основе https://arxiv.org/pdf/1512.03385.pdf и https://arxiv.org/pdf/1603.05027.pdf. Итак, вот остаточные единицы, которые я беспокоюсь о реализации в tenorflow:

Resnet Unit v1 и его альтернатива узкого места

И остаточная единица v2 (б) ниже:

Поэтому я изучил их реализацию в https://github.com/tensorflow/models/blob/master/official/resnet/resnet_model.py и обнаружил следующее для модуля resnet v1:

def _building_block_v1(inputs, filters, training, projection_shortcut, strides,
                       data_format):
    '''
    .........
    '''

    if projection_shortcut is not None:
        shortcut = projection_shortcut(inputs)
        shortcut = batch_norm(inputs=shortcut, training=training, data_format=data_format)

поэтому мой первый вопрос: не следует ли использовать пакетную норму после добавления и никогда не связываться с функцией идентификации h(x) похоже на то, что было упомянуто в статье?

Во-вторых, при рассмотрении реализации модуля Resnet v2, я нашел эту реализацию:

def _building_block_v2(inputs, filters, training, projection_shortcut, strides,
                       data_format):
    '''
    ........
    '''

    shortcut = inputs
    inputs = batch_norm(inputs, training, data_format)
    inputs = tf.nn.relu(inputs)

    # The projection shortcut should come after the first batch norm and ReLU
    # since it performs a 1x1 convolution.
    if projection_shortcut is not None:
        shortcut = projection_shortcut(inputs)

не должны ли мы выполнить проекцию на исходный ввод перед выполнением BN и RELU? Я спрашиваю, потому что это то, что я видел на втором изображении выше. Я думаю, мы не должны касаться пути идентификации / ярлыка...

Пожалуйста, поправьте меня, если я ошибаюсь.

Любая помощь высоко ценится!!!

0 ответов

Другие вопросы по тегам