gpt4 book ai didi

python - Tensorflow 大步论证

转载 作者:IT老高 更新时间:2023-10-28 21:06:13 25 4
gpt4 key购买 nike

我正在尝试理解 tf.nn.avg_pool、tf.nn.max_pool、tf.nn.conv2d 中的 strides 参数。

documentation反复说

strides: A list of ints that has length >= 4. The stride of the sliding window for each dimension of the input tensor.

我的问题是:

  1. 4+ 个整数分别代表什么?
  2. 为什么卷积网络必须有 strides[0] = strides[3] = 1?
  3. this example我们看到 tf.reshape(_X,shape=[-1, 28, 28, 1])。为什么是 -1?

遗憾的是,文档中使用 -1 进行 reshape 的示例并不能很好地适应这种情况。

最佳答案

池化和卷积运算在输入张量上滑动一个“窗口”。使用 tf.nn.conv2d例如:如果输入张量有 4 个维度:[batch, height, width, channels],那么卷积在 height, width 维度上的 2D 窗口上运行.

strides 确定窗口在每个维度上的移动量。典型用法将第一个(批处理)和最后一个(深度)步幅设置为 1。

让我们使用一个非常具体的示例:在 32x32 灰度输入图像上运行二维卷积。我说灰度是因为输入图像的深度=1,这有助于保持简单。让该图像看起来像这样:

00 01 02 03 04 ...
10 11 12 13 14 ...
20 21 22 23 24 ...
30 31 32 33 34 ...
...

让我们在单个示例(批量大小 = 1)上运行 2x2 卷积窗口。我们将给卷积一个输出 channel 深度为 8。

卷积的输入具有 shape=[1, 32, 32, 1]

如果您指定 strides=[1,1,1,1]padding=SAME,那么过滤器的输出将为 [1, 32, 32 , 8]。

过滤器将首先创建一个输出:

F(00 01
10 11)

然后为:

F(01 02
11 12)

等等。然后它会移动到第二行,计算:

F(10, 11
20, 21)

然后

F(11, 12
21, 22)

如果您指定 [1, 2, 2, 1] 的步幅,则不会重叠窗口。它将计算:

F(00, 01
10, 11)

然后

F(02, 03
12, 13)

池化操作符的步幅操作类似。

问题 2:为什么为卷积网络跨步 [1, x, y, 1]

第一个是批处理:您通常不想跳过批处理中的示例,或者您不应该首先包含它们。 :)

最后 1 是卷积的深度:出于同样的原因,您通常不希望跳过输入。

conv2d 运算符更通用,因此您可以创建沿其他维度滑动窗口的卷积,但这不是卷积网络中的典型用途。典型的用途是在空间上使用它们。

为什么要 reshape 为 -1 -1 是一个占位符,表示“根据需要调整以匹配完整张量所需的大小”。这是一种使代码独立于输入批量大小的方法,这样您就可以更改管道,而不必在代码中的任何地方调整批量大小。

关于python - Tensorflow 大步论证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34642595/

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