Я создаю 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