【问题标题】:looking for an equivalent of Tensorflow normalization layer in Pytorch在 Pytorch 中寻找等效的 Tensorflow 归一化层
【发布时间】:2021-02-07 19:17:53
【问题描述】:

我使用的是'tf.keras.layers.experimental.preprocessing.Normalization'。该层很酷,因为您可以在该层中保存权重以将任何输入数据标准化到该层。 但是,我找不到any normalization layer in Pytorch。 有没有相同作用的层?

【问题讨论】:

    标签: tensorflow pytorch


    【解决方案1】:

    PyTorch 没有内置的实现这一点。但是,您可以自己测量平均值和标准差(仅保留相关轴),然后将 torchvision.transform.Normalize 与这些统计数据一起使用。

    例如,为了测量通道上的meanstd

    >>> x = torch.rand(16, 3, 10, 10)
    >>> mean, std = x.mean((0, 2, 3)), x.std((0, 2, 3))
    (tensor(0.4941), tensor(0.2899))
    

    然后初始化一个变换:

    >>> t = torchvision.transform.Normalize(mean, std)
    

    您可以在新数据集上使用此函数,根据初始数据集的统计数据对其进行标准化:

    >>> z_normalized = t(z)
    

    【讨论】:

      【解决方案2】:

      也许您花了大约 1 秒的时间寻找它 :-) 在 pytorch 中,它是通过转换完成的。

      例如:

      from torchvision import transforms
      
      transforms.Normalize(
          mean=[0.485, 0.456, 0.406],
          std=[0.229, 0.224, 0.225]
      )
      

      互联网上有数以千计的例子。

      【讨论】:

      • "[tf.keras.layers.experimental.preprocessing.Normalization] 将通过预先计算均值和方差将其输入强制转换为以 0 为中心、标准差为 1 [...]数据” cf.文档:这不是torchvision.transforms.Normalize 所做的。
      • 你说这是不正确的,但你字面上给出了相同的答案。
      • 这不是 OP 所要求的:torchvision.Normalize 不测量统计数据。您还没有展示如何使用Normalize 来复制tfNormalization 实现。
      猜你喜欢
      • 2021-01-31
      • 2020-03-28
      • 2022-10-12
      • 2021-11-29
      • 2019-01-02
      • 2020-10-30
      • 2021-08-01
      • 2021-10-11
      • 2021-07-04
      相关资源
      最近更新 更多