2017-10-01 3 views
0

Je pré-entraîné CNN (RESNET18) sur ensemble de données IMAGEnet, maintenant ce que je veux est d'obtenir la sortie de mon image d'entrée d'une couche particulière,Comment obtenir ouput d'une couche particulière de pré-entraîné CNN dans pytorch

par exemple .

mon image d'entrée est de FloatTensor(3, 224, 336) et i envoyer un lot de size = 10 dans mon modèle ResNet, maintenant ce que je veux est la sortie retournée par model.layer4,

Maintenant que je l'ai essayé est out = model.layer4(Variable(input)) mais il m'a donné entrée dimensions erreur incompatibilité (Comme prévu), ceci est l'erreur exacte retourné

RuntimeError: Need entrée de dimension 4 et input.size [1] == 64 mais a obtenu entrée pour être de forme: [10 x 3 x 224 x 336] sous/Users/soumith/miniconda2/conda-bld/pytorch_1501999754274/travail/torche/lib/THNN/generic/SpatialConvol utionMM.c: 47

donc je suis confus, comment procéder pour obtenir ma sortie layer4

PS: Ma tâche ultime est de combiner la sortie layer4 et la sortie de la couche fullyconnected ensemble (tweeking dans CNN, genre de gated CNN), donc si quelqu'un a une idée dans ce cas, alors s'il vous plaît ne me dites, peut-être mon approche ci-dessus ne va pas

Répondre

0

vous devez créer un module avec toutes les couches du début du bloc que vous voulez:

resnet = torchvision.models.resnet18(pretrained=True) 
f = torch.nn.Sequential(*list(resnet.children())[:6]) 
features = f(imgs) 
+1

wow merci qui a fonctionné, mais pouvez-vous plaider expliquez-le un peu, pourquoi avez-vous choisi 6 comme l'index? Je n'ai pas beaucoup d'expérience dans l'apprentissage en profondeur encore –

+1

ok je l'ai eu pourquoi vous avez choisi 6, merci pour votre réponse :) –