tf.nn.conv2d与strides = 2和tf.nn.max_pool与2x2池之间的区别是什么?

时间:2017-08-09 15:25:52

标签: machine-learning tensorflow deep-learning training-data

如上所述,两者

  

tf.nn.conv2d,strides = 2

  

tf.nn.max_pool with 2x2 pooling

可以将输入的大小减少到一半,我知道输出可能会有所不同,但我不知道的是,影响最终的训练结果与否,任何关于此的线索,谢谢。

2 个答案:

答案 0 :(得分:2)

在两个示例中,我们假设我们有一个[height, width]内核应用了strides [2,2]。这意味着我们将内核应用于2-D输入上的大小为[height, width]的2-D窗口以获得输出值,然后向上或向下滑动窗口2以获得下一个输出值。

在这两种情况下,假设padding='SAME'

,最终输出的输出比输入少4倍(每个维度减少2倍)

不同之处在于如何为每个窗口计算输出值:

<强> conv2d

  • 输出是输入值的线性组合乘以[height, width]内核中每个单元格的权重
  • 这些权重在您的模型中成为可训练的参数

<强> max_pool

  • 输出只是在输入值的[height, width]窗口中选择最大输入值
  • 此操作没有引入重量且没有可训练参数

答案 1 :(得分:0)

最终训练的结果可能实际上是不同的,因为卷积将张量乘以滤波器,您可能不想这样做,因为它占用了额外的计算时间,并且还可以过度拟合模型,因为它将具有更多权重。