tf.keras, как повторно использовать повторно snet слои в качестве слоя настройки в модели настройки - PullRequest
0 голосов
/ 07 мая 2020

Я ищу решение для повторного использования предварительно обученной модели Resnet50 в качестве настраиваемых подслоев внутри большой настраиваемой модели.

В моем сценарии я использую Resnet50 в качестве магистрали FCN, а затем я буду использовать FCN вывод результата в качестве входных данных для других сетевых слоев. (это конвейер)

вы можете увидеть мой код: https://github.com/piginzoo/textscanner/blob/master/network/layers/fcn_layer.py https://github.com/piginzoo/textscanner/blob/master/network/model.py

Мой вопрос: я не могу найти пример кода, чтобы интегрировать слои Resnet50 в качестве части настраиваемого уровня в TF 2.0, я ищу stackoverflow, официальный веб-сайт TF2.0 и блоги, не могу найти возможный фрагмент кода для демонстрации того, как реализовать такие

но я считаю, что это очень распространенная парадигма, сталкивался ли кто-нибудь когда-либо с такими проблемами, и любые советы или демонстрация кода будут очень признательны.

1 Ответ

0 голосов
/ 31 мая 2020

Наконец, я нашел возможный способ, например:

в качестве показанного кода, я создал новую модель, которая использует предварительно обученные входные данные Resnet50 в качестве входных данных и использует 3 "conv_block_out" в качестве новых моделей. выходы, а в методе вызова я просто называю модель стилем «слой».

для получения подробной информации, вы можете обратиться к моему Github за завершенным кодом .

Фиктивный код:

class FCNLayer(Layer):
    def __init__(self, name, resnet50_model):
        super().__init__(name=name)
        resnet50_model.layers.pop()
        resnet50_model.summary()
        self.resnet50_model = resnet50_model

    def build(self, input_image, FILTER_NUM=4):
        layer_names = [
            "conv3_block4_out",  # 1/8
            "conv4_block6_out",  # 1/16
            "conv5_block3_out",  # 1/32
        ]
        layers = [self.resnet50_model.get_layer(name).output for name in layer_names]
        self.FCN_left = Model(inputs=self.resnet50_model.input, outputs=layers)
        ......


    def call(self, input_image, training=True):

        pool3, pool4, pool5 = self.FCN_left(input_image)
        .......
...