pytorch - Torchvision 规范化 - 它如何在手段/sds 的元组上运行?
问题描述
我不明白这种转换是如何从torchvision 进行的。最终我想建立一个自定义的规范化类,所以我需要先弄清楚它是如何工作的。
在文档中,它描述了这样的初始化:
def __init__(self, mean, std, inplace=False):
self.mean = mean
self.std = std
self.inplace = inplace
当我通常传递这些参数(不是自定义类)时,我将它们作为每个通道的列表或元组传递:
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
但是,如果我看一下电话:
return F.normalize(tensor, self.mean, self.std, self.inplace)
所有这些都将元组传递给 F.normalize() ,它只接受 p 参数的单个值。
该类必须以某种方式遍历通道以允许实现这一点,但它是如何做到这一点的,我如何在自定义类中实现它?
基于本教程,我将这样描述它:
class Normalize(object):
"""Convert ndarrays in sample to Tensors."""
def __init__(self, mean, std, inplace=False):
self.mean = mean
self.std = std
self.inplace = inplace
def __call__(self, sample):
image, landmarks = sample['image'], sample['landmarks']
return {'image': F.normalize(image, self.mean, self.std, self.inplace),
'landmarks': landmarks}
但这不起作用,因为它不会通过每个渠道。
解决方案
里面调用的normalize
函数就是这个https://github.com/pytorch/vision/blob/master/torchvision/transforms/functional.py#L191
输入是一个形状张量,并且(C, H, W)
可以是序列,在内部转换为张量。标准化是通过广播以这种方式完成的:mean
std
tensor.sub_(mean[:, None, None]).div_(std[:, None, None])
推荐阅读
- c# - 循环遍历 Json 文件并提取特定数据
- r - 与其他绘图(ggplot2)结合时如何将geom_bar中的计数更改为百分比?
- java - 获取 406 找不到可接受的表示 /Spring JSON 测试。如何在测试中忽略 .htm 扩展名?
- linux - 是否可以在程序中提取指令特定能耗?
- docker - Dockerfile 中是否有等效的预处理器指令?
- java - 如何在 JavaFX 中设置 TextField 的尺寸(特别是宽度)?
- ruby-on-rails - 提交 Rails 表单会导致页面不存在
- python - Python Scipy stats pdf概率分布函数总和不为1
- java - Android 如何在所有活动中动态更改主题?
- c# - 我对 Parallel.ForEach 做错了什么