### 使用Lab颜色空间时,transforms.Normalize()如何在0到1之间归一化

当我想将张量归一化到0到1的范围时,应该使用什么样的均值和标准差?但我处理的图像只有2个通道(a、b通道 -> -128到127),而不是3个通道。因此,通常的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抱怨张量的大小,因为你缺少一个通道。

此外,这些“常用”的均值和标准差值是在ImageNet数据集上计算的,如果你的数据统计特性与该数据集相匹配,这些值是有用的。

由于你只处理两个通道,我假设你的领域可能与3通道自然图像有很大不同。在这种情况下,我会简单地使用0.5作为meanstd的值,这样最小值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() 假设你的输入范围在[0, 255] 进行变换前,因此它基本上是将输入除以255。如果在你的领域中并非如此(例如,你的输入总是处于[1, 50]范围内),我建议你创建一个自定义变换,以便根据你的数据的实际上限进行除法操作。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注