“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 来自您在下面的forfor 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:”和以下行的含义是啥?的主要内容,如果未能解决你的问题,请参考以下文章

GREP缩写是啥含义?它的五大功能是啥?

c ++中以下句子的含义是啥[重复]

有人可以解释一下程序中以下两行的含义来实现管道吗?

Hadoop FsImage中DSQUOTA和NSQUOTA列的含义是啥?

NHibernate中持久性模型的确切含义是啥?

perf 脚本输出的含义是啥?