Я разрабатываю эту программу на python и все время получаю эту ошибку.
AttributeError Traceback (most recent call last)
<ipython-input-17-334b6c50bab3> in <module>()
30
31 args = parser.parse_known_args()
---> 32 root = args.data_dir
33 save = args.save_dir
34 learningrate = args.learning_rate
AttributeError: 'tuple' object has no attribute 'data_dir'
Я пытался придумать, как это исправить, и хотел бы знать, может ли кто-нибудь помочь?
Спасибо!
import matplotlib.pyplot as plt
import numpy as np
import torch
from torch import nn
from torch import tensor
from torch import optim
import torch.nn.functional as F
from torch.autograd import Variable
from torchvision import datasets, transforms
import torchvision.models as models
from collections import OrderedDict
import json
import PIL
from PIL import Image
import argparse
import Utilities3
parser = argparse.ArgumentParser(description='train3.py')
parser.add_argument('data_dir', type=str, \
help='Path of the Image Dataset (with train, valid and test folders)')
parser.add_argument('--save_dir', type=str, \
help='Directory to save checkpoints')
parser.add_argument('--arch', type=str, \
help='Models architeture. Default is densenet121. Choose one at https://pytorch.org/docs/master/torchvision/models.html')
parser.add_argument('--learning_rate', type=float, \
help='Learning rate. Default is 0.01')
parser.add_argument('--hidden_units', type=int, \
help='Hidden units. Default is 200')
parser.add_argument('--epochs', type=int, \
help='Number of epochs. Default is 3')
parser.add_argument('--gpu', action='store_true', \
help='Use GPU for inference if available')
parser.add_argument('--save_every', type=int, \
help='Number of steps to save the checkpoint. Default is 50')
args = parser.parse_known_args()
root = args.data_dir
save = args.save_dir
learningrate = args.learning_rate
structure = args.arch
dropout = args.dropout
hidden_layer = args.hidden_units
device = args.gpu
epochs = args.epochs
def main():
training_loader, validation_loader, testing_loader = Utilities3.load_data(root)
model, optimizer, criterion = Utilities3.network_construct(structure, dropout, hidden_layer, learningrate, device)
Utilities3.do_deep_learning(model, optimizer, criterion, epochs, 40, training_loader, device)
Utilities3.save_checkpoint(model, path, structure, hidden_layer, dropout, learningrate)
print("Training is finish")
if __name__== "__main__":
main()
Вы уверены, что необходимо использовать parse_known_args
?
Если так, необходимо изменить присвоение root
и другие переменные как это:
root = args[0].data_dir
Если Вы выбрали parse_known_args
по ошибке просто используйте parse_args
и Вашей проблемы не стало.
Вы могли или прочитать документацию для argparse
(https://docs.python.org/3/library/argparse.html#argparse. ArgumentParser.parse_known_args), где это говорит:
Вместо этого это возвращает два кортежа объекта, содержащие заполненное пространство имен и список остающихся строк аргумента.
Таким образом необходимо получить доступ к первому объекту в кортеже, который является [0]
поскольку Python основан на нуле.
Или Вы могли установить точку останова путем вставки breakpoint()
или import pdb;pdb.set_trace()
(в зависимости от Вашей версии Python), и осматривают значение args
.
Если Вы нуждаетесь в дальнейшем совете, просто говорите мне, и я обновлю ответ.