Использование части слоев в предварительно обученной модели - pytorch - PullRequest
0 голосов
/ 27 апреля 2019

Я хочу создать потерю восприятия для видео, это означает, что моя потеря содержит предварительно обученную сеть (в моей работе я думаю о том, чтобы использовать resnet 3D, которая обучалась для задачи распознавания видео), и я хочу передать сгенерированное видео иреального видео через сеть, и взять его выход в несколько слоев (то есть после layer3, layer5… для каждого видео в сети 3D resnet).

я знаю, что в пакете «models» в pytorch iМожно загружать определенные предварительно обученные модели и использовать функцию функций на входе.например, вот так:

class _netVGGFeatures(nn.Module):
def __init__(self):

    super(_netVGGFeatures, self).__init__()
    self.vggnet = models.vgg16(pretrained=True).cuda() #Load the pre trained VGG16 model from pytorch on GPU
    self.layer_ids = [2, 7, 12, 21, 30]


def main(self, z, levels):
    layer_ids = self.layer_ids[:levels] #if its 64 its [2, 7, 12, 21]
    id_max = layer_ids[-1] + 1 #22
    output = []
    for i in range(id_max):
        **z = self.vggnet.features[i](z)** #extract and slice the features and operate them on the input
        if i in layer_ids:
            output.append(z) #adding just the operation of the layers that in the layer_ids array on the image
    return output

def forward(self, z, levels):
    output = self.main(z, levels)
    return output

Я пытался использовать «функции» в моей 3D-сети, но она не работает.

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

...