“x:”和以下行的含义是啥?
Posted
技术标签:
【中文标题】“x:”和以下行的含义是啥?【英文标题】:What is the meaning of "x:" and of the following line?“x:”和以下行的含义是什么? 【发布时间】:2019-09-11 13:18:07 【问题描述】: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")
【问题讨论】:
那是一个字典。如果您不熟悉该语言,请先阅读结构化教程,例如docs.python.org/3/tutorial/index.html. 我要强调的*字典理解——注意下面的for x in ['train','val']
——所以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
是键。
这种结构,正如Kabanus所说,它是一个字典理解,一个字典生成器。
您可以在这里了解更多关于生成器的信息: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'
基本上,它从列表中获取每个字符串并形成一个包含两个项目的字典。
【讨论】:
以上是关于“x:”和以下行的含义是啥?的主要内容,如果未能解决你的问题,请参考以下文章