Как получить доступ к слоям conv2d в resnet50?

#deep-learning #pytorch #conv-neural-network #resnet

#глубокое обучение #pytorch #conv-нейронная сеть #resnet

Вопрос:

Я использую модель Resnet50 и хочу визуализировать функции определенного слоя conv2d после пересылки изображения по сети, но почему-то я не могу получить доступ к внутренним слоям conv2d в блоках Bottleneck.

Мой код до сих пор:

 def forward_res(model, conv_layer, x): 
    count = 0
    for child in model.children(): #outer layers
        x = child(x)
        if isinstance(child, nn.Conv2d):
            if count == conv_layer:
                return x
            count = count 1
            
        if isinstance(child, nn.Sequential):
            for bottleneck in child: 
                for lay in bottleneck.children(): #inner layers
                    x = lay(x)
                    if isinstance(lay, nn.Conv2d):
                        if count == conv_layer:
                            return x
                        count = count   1
 

Когда я пытаюсь использовать свой код подобным образом, я получаю следующую ошибку:

Ошибка времени выполнения: заданные группы = 1, вес размера 1 3 1 1, ожидаемый ввод [1, 1, 512, 512] должен иметь 3 канала, но вместо этого получил 1 канал

Может кто-нибудь помочь мне, как получить доступ к внутренним слоям conv2d модели Renset? Или скажите мне, что не так с моим кодом?

Комментарии:

1. Следите за формой вашего входного тензора. Если у вас есть один слой в качестве входных данных, вы можете дублировать слой три раза на 2-м dim : x.repeat(1, 3, 1, 1) .