首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Torchvision normalize如何对均值/sds的元组进行操作?

Torchvision normalize如何对均值/sds的元组进行操作?
EN

Stack Overflow用户
提问于 2019-09-09 15:09:13
回答 1查看 375关注 0票数 1

我不明白torchvision的这种转换是如何工作的。最终,我想要构建一个自定义的normalize类,所以我需要首先弄清楚这是如何工作的。

在文档中,它是这样描述init的:

代码语言:javascript
复制
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参数的单个值。

这个类必须以某种方式遍历通道才能实现它,但是它如何做到这一点,以及我如何在自定义类中实现它?

基于this tutorial,我会这样描述它:

代码语言:javascript
复制
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}

但这不起作用,因为它不会通过每个通道。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-09 21:29:26

在那里调用的normalize函数是这样一个https://github.com/pytorch/vision/blob/master/torchvision/transforms/functional.py#L191

输入是形状为(C, H, W)的张量,meanstd可以是序列,这些序列在内部转换为张量。规范化是通过广播in this way完成的

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57849289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档