此处引用的图像的步幅信息是什么?

人工智能 深度学习 卷积神经网络 术语 图像处理 大步
2021-11-02 18:50:56

在卷积神经网络中,卷积和池化操作有一个称为步幅的参数,它决定了内核需要对输入图像进行的跳跃量。您可以从此处获取有关步幅的更多信息

步幅是在输入矩阵上移动的像素数。当步幅为 1 时,我们一次将过滤器移动到 1 个像素。当步幅为 2 时,我们一次将过滤器移动到 2 个像素,依此类推。

但是,我不明白张量级图像的步幅信息是什么意思。考虑一下Eli Stevens 等人的教科书“使用 PyTorch进行深度学习”中的“真实世界数据表示”一章中的以下段落。

img = torch.from_numpy(img_arr)
out = img.permute(2, 0, 1)

我们之前已经看到过,但请注意,此操作不会复制张量数据。相反,out使用相同的底层存储,img并且只在张量级别使用大小和步幅信息。这很方便,因为操作非常便宜;但就像提醒一样:​​更改像素img将导致out.

它提到了图像张量级别的步幅信息。它们是指与 CNN、池等相关的步幅,还是指任何其他步幅信息?

1个回答

它们是指与 CNN、池等相关的步幅,还是指任何其他步幅信息?

引用“仅在张量级别使用大小和步幅信息”所指的步幅是指张量的内部存储。幸运的是,在大多数关于 AI 逻辑的正常对话中,您并不关心这一点,它与神经网络实现无关,而是一种较低级别的优化(与其他一些不使用内部步幅的实现张量的方法相比)。

大多数通用计算机芯片不对数据使用多部分寻址,例如(x,y,z),而是使用单个内存位置编号。构建一个数据结构来表示一个二维或更多维张量意味着结合更多的基本表示。有几种不同的方法可以做到这一点。一个可能是一个数组数组,其中外部数组包含指向内部数组内存地址的指针。但是,带有一些管理编号的单个数组(通常在开始时,甚至作为单独的数据结构,因此您可以拥有相同数据的多个张量视图)具有一些优势 - 数组上的一些操作要多得多高效的。以这种方式排列存储时,整形和转置是两个可以更有效地实现的操作。

因此,与张量单元数据(每个位置内的数字)一起,典型的张量实现将分别存储有关数据结构的信息。一个有用的数据是步幅,它是在数据的 n 索引视图中为特定方向上的每个步骤添加多少内存位置。例如,在形状为 (6,8) 的 2 索引张量中,数据存储在行中,然后增加列索引将在内存位置中增加 +1 步,而增加行索引将需要 +8 步(一行中的列数)。这是该形状的行步长。

从技术上讲,这两种步幅在概念上非常相似。不同之处在于实现它们的代码级别。通常对于使用张量库的大多数工作,您只关心发生的这种“内部”步幅,因为它使您确信特定张量操作的成本很低,例如生成不同形状的视图。

最重要的是,除非您正在开发自己的张量库,或者使用低级语言 (C) 深入研究张量库的内部结构,否则您不需要指定使用的步幅值。相反,您可以将引用的文本作为有效实施特定操作的声明,并且您可以在自己的代码中使用它,并且确信使用它不会产生高 CPU(或 GPU)成本。