【问题标题】:How to normalize images in PyTorch如何在 PyTorch 中标准化图像
【发布时间】:2020-03-02 08:57:15
【问题描述】:
transform = transforms.Compose([
    transforms.ToTensor()
])

trainset = torchvision.datasets.ImageFolder(root='C:/Users/beomseokpark/Desktop/CNN/train_data', transform = transform)
data_loader = DataLoader(dataset = trainset, batch_size = 8, shuffle = True, num_workers=2)

with torch.no_grad():
    for num, data in enumerate(trainset):
        imgs, label = data

我在 torchvision 库中使用 ImageFolder 加载了图像,如何从图像的每个通道中获取均值和标准?

谁能帮帮我?

【问题讨论】:

    标签: python machine-learning neural-network pytorch


    【解决方案1】:

    有一种“懒人”方法:您可以简单地将nn.BatchNorm2d 作为网络的第一层。使用适当的momentumtrack_running_stats=True,此层将为您估计数据的均值和方差。

    或者,您可以使用计算均值和方差

    mu = torch.zeros((3,), dtype=torch.float)
    sig = torch.zeros((3,), dtype=torch.float)
    n = 0
    with torch.no_grad():
        for num, data in enumerate(trainset):
            imgs, _ = data 
            mu += torch.sum(imgs, dim=(0, 2, 3))
            sig += torch.sum(imgs**2, dim=(0, 2, 3))
            n += imgs.numel() // imgs.shape[0]
    n  = float(n)
    mu = mu / n  # mean
    sig = sig / n - (mu ** 2)
    

    【讨论】:

      【解决方案2】:
      import torch as t
      
      batch_size = 8
      imgs = t.empty(batch_size, 3, 128, 128).normal_()
      
      t.nn.Flatten(start_dim=1)(imgs.permute(1, 0, 2, 3)).mean(dim=1)
      t.nn.Flatten(start_dim=1)(imgs.permute(1, 0, 2, 3)).std(dim=1).shape
      

      火炬.Size([3])

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-01
        • 2021-10-07
        • 2017-07-05
        • 2021-05-12
        • 1970-01-01
        • 2019-09-20
        • 2020-10-09
        • 2020-05-06
        相关资源
        最近更新 更多