невозможно указать тип нейронной сети в качестве входного параметра - PullRequest
0 голосов
/ 18 апреля 2020

Я создаю Python программу, которая должна принимать тип нейронной сети (vgg19 или densenet121) в качестве входного параметра наряду с количеством скрытых единиц в классификаторе. Затем программа должна импортировать сеть из torchvision.models и адаптировать часть классификатора в соответствии с предпочтениями пользователя. Следующий код завершается ошибкой с

enter code AttributeError: 'str' object has no attribute 'parameters'

Я понимаю, что на данном этапе выполнения программы:

models.vgg19(pretrained=True)

по-прежнему строка, но я не знаю, как это сделать «исполняемый». Вот код.

from torch import nn
from torchvision import datasets, transforms, models
import sys
import os
import argparse
parser = argparse.ArgumentParser()

parser.add_argument("NETWORK", help="enter the network name",action='store')

parser.add_argument("HIDDEN_UNITS", help="enter the number of hidden units",action='store')
args = parser.parse_args()
print(args)
MODEL = args.NETWORK
HIDDEN_UNITS = args.HIDDEN_UNITS
print('chosen model is ',MODEL)
print('chosen # hidden units is ',HIDDEN_UNITS)
#
def set_model(MODEL, HIDDEN_UNITS):
        print('in function Set_model, Model is ',MODEL,' Hidden Units is ', HIDDEN_UNITS)
        if MODEL == 'densenet121':
                INPUT_UNITS = 1024
        elif MODEL == 'vgg19':
                INPUT_UNITS = 25088
        else:
                print('non supported model')
                sys.exit(0)

        x = 'models.'+MODEL+'(pretrained=True)'
        print(x)
        model = x
#       model =models.x(pretrained=True)
        for param in model.parameters():
                param.requires_grad = False

        from collections import OrderedDict
        classifier =nn.Sequential(
                OrderedDict([
                ('fc1',nn.Linear(INPUT_UNITS, HIDDEN_UNITS)),
                ('relu',nn.ReLU()),
                ('fc2',nn.Linear(HIDDEN_UNITS, 102)),
                ('output',nn.LogSoftmax(dim=1))
                ]))
        model.classifier = classifier
        return model
#
# main program
#
my_model = set_model(MODEL, HIDDEN_UNITS)
my_model
...