Что означает «x:» и следующая строка?

#python #python-3.x #pytorch

#питон #python-3.x #пыторч #python #pytorch

Вопрос:

В чем смысл x: и следующей строки?

 image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x),
                                          data_transforms[x])
  

Кто-нибудь может объяснить синтаксис этой строки?

Это из руководства PyTorch:https://pytorch.org/tutorials/beginner/transfer_learning_tutorial.html

 # Data augmentation and normalization for training
# Just normalization for validation
data_transforms = {
    'train': transforms.Compose([
        transforms.RandomResizedCrop(224),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
    'val': transforms.Compose([
        transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
}

data_dir = 'data/hymenoptera_data'
image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x),
                                          data_transforms[x])
                  for x in ['train', 'val']}
dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x], batch_size=4,
                                             shuffle=True, num_workers=4)
              for x in ['train', 'val']}
dataset_sizes = {x: len(image_datasets[x]) for x in ['train', 'val']}
class_names = image_datasets['train'].classes

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
  

Комментарии:

1. Это словарь . Если вы новичок в языке, начните с просмотра структурированного руководства, например docs.python.org/3/tutorial/index.html .

2. * Понимание словаря, которое я хотел бы подчеркнуть — обратите for x in ['train','val'] внимание на немного ниже — so x является одним из них.

Ответ №1:

 image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x),
                                          data_transforms[x])
                  for x in ['train', 'val']}
  

x исходит из for приведенного ниже. for x in ['train', 'val'] поэтому для каждого значения в ['train', 'val'] вы создаете, dict в котором это x является ключом.

Такого рода конструкция, как сказал Кабанус, это понимание словаря, генератор словаря.

Вы можете узнать больше о генераторах здесь:https://docs.python.org/3/tutorial/classes.html#generators

Ответ №2:

{x: "data/hymenoptera_data/" x for x in ['train', 'val']}

Результаты будут:

{'train': 'data/hymenoptera_data/train', 'val': 'data/hymenoptera_data/val'}

По сути, он берет каждую строку из списка и формирует словарь с двумя элементами.