#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']
внимание на немного ниже — sox
является одним из них.
Ответ №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'}
По сути, он берет каждую строку из списка и формирует словарь с двумя элементами.