gpt4 book ai didi

python - 使用 Lab 时,transforms.Normalize() 介于 0 和 1 之间

转载 作者:行者123 更新时间:2023-11-30 09:40:22 24 4
gpt4 key购买 nike

这意味着,当我想将张量标准化为 0 到 1 的范围时,我应该使用 std 吗?但我只处理 2 个 channel (a、b channel -> -128 到 127)的图像,而不是 3 个 channel 。因此,通常的 mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] 无法完成这项工作。

transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
])

这会导致此错误消息:

tensor.sub_(mean[:, None, None]).div_(std[:, None, None])

RuntimeError: The size of tensor a (2) must match the size of tensor b(3) at non-singleton dimension 0

最佳答案

如您所见,PyTorch 提示张量大小,因为您缺少 channel 。

此外,“通常”平均值和标准值是在 ImageNet 数据集上计算的,如果您的数据统计数据与该数据集的统计数据匹配,则这些值非常有用。

由于您仅使用两个 channel ,我假设您的域可能与 3 channel 自然图像有很大不同。在这种情况下,我只需对 meanstd 使用 0.5,这样最小值 0 将转换为 (0 - 0.5)/0.5 = -1 以及最大值 1 到 (1 - 0.5)/0.5 = 1

transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean=[0.5, 0.5],
std=[0.5, 0.5])
])
<小时/>

编辑:我建议输入为零中心。

但是,如果由于某种原因您必须将其置于 [0, 1] 范围内,则仅调用 ToTensor() 就足够了。

在这种情况下,请注意。我认为 ToTensor() assumes your input to lie in range [0, 255]在转换之前,所以它基本上将其除以 255。如果您的域中不是这种情况(例如,由于某种原因您的输入始终在 [1, 50] 范围内),我只需创建一个 custom transform除以数据的实际上限。

关于python - 使用 Lab 时,transforms.Normalize() 介于 0 和 1 之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59115888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com