【发布时间】:2021-02-07 19:17:53
【问题描述】:
我使用的是'tf.keras.layers.experimental.preprocessing.Normalization'。该层很酷,因为您可以在该层中保存权重以将任何输入数据标准化到该层。 但是,我找不到any normalization layer in Pytorch。 有没有相同作用的层?
【问题讨论】:
标签: tensorflow pytorch
我使用的是'tf.keras.layers.experimental.preprocessing.Normalization'。该层很酷,因为您可以在该层中保存权重以将任何输入数据标准化到该层。 但是,我找不到any normalization layer in Pytorch。 有没有相同作用的层?
【问题讨论】:
标签: tensorflow pytorch
PyTorch 没有内置的实现这一点。但是,您可以自己测量平均值和标准差(仅保留相关轴),然后将 torchvision.transform.Normalize 与这些统计数据一起使用。
>>> 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)
【讨论】:
也许您花了大约 1 秒的时间寻找它 :-) 在 pytorch 中,它是通过转换完成的。
例如:
from torchvision import transforms
transforms.Normalize(
mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225]
)
互联网上有数以千计的例子。
【讨论】:
torchvision.transforms.Normalize 所做的。
torchvision.Normalize 不测量统计数据。您还没有展示如何使用Normalize 来复制tf 的Normalization 实现。