深度学习中的SAME和VALID填充方式

摘要

本文将介绍深度学习中的'SAME'和'VALID'填充方式,并通过例子进行说明。我们将使用TensorFlow和Python来实现这些填充方式。

内容

深度学习中的卷积操作通常需要对输入数据进行填充,以确保输出大小符合预期。TensorFlow中的卷积操作提供了两种常用的填充方式:'SAME'和'VALID'。

'VALID'填充方式

  • 'VALID'填充方式表示不进行填充操作。
  • 在卷积操作中,'VALID'填充方式的输出大小会根据输入数据大小、卷积核大小以及步长进行计算。
  • 'VALID'填充方式的输出大小计算公式为:
    1out_height = ceil(float(in_height - filter_height + 1) / float(strides[1]))
    2out_width  = ceil(float(in_width - filter_width + 1) / float(strides[2]))
    

其中,in_heightin_width为输入数据的高度和宽度,filter_heightfilter_width为卷积核的高度和宽度,strides[1]strides[2]为步长的垂直和水平方向上的大小。

'SAME'填充方式

  • 'SAME'填充方式表示进行填充操作,以确保输出大小与输入大小相同。
  • 在卷积操作中,'SAME'填充方式会在输入数据的上下左右分别填充一定数量的0。
  • 'SAME'填充方式的输出大小计算公式为:
    1out_height = ceil(float(in_height) / float(strides[1]))
    2out_width  = ceil(float(in_width) / float(strides[2]))
    

同时,还需要根据计算结果对输入数据进行填充,以确保输出大小与输入大小相同。

为了更好地理解'SAME'和'VALID'填充方式,我们将通过一个例子来进行说明。

假设输入数据为一个形状为[2, 3],通道数为1的图像,并设置填充方式为'SAME'和'VALID',核大小为2x2,步长为2。

对于'SAME'填充方式,我们将输入数据进行填充,填充后的大小为[2, 4]。然后,我们对填充后的数据进行最大池化操作,得到输出的大小为[1, 2]。具体代码如下所示:

1import tensorflow as tf
2
3x = tf.constant([[1., 2., 3.],
4                 [4., 5., 6.]])
5x = tf.reshape(x, [1, 2, 3, 1]) 
6
7same_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='SAME')
8print(same_pad.get_shape())  # 输出为(1, 1, 2, 1)

对于'VALID'填充方式,我们不进行填充操作,直接对输入数据进行最大池化操作,得到输出的大小为[1, 1]。具体代码如下所示:

1import tensorflow as tf
2
3x = tf.constant([[1., 2., 3.],
4                 [4., 5., 6.]])
5x = tf.reshape(x, [1, 2, 3, 1]) 
6
7valid_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='VALID')
8print(valid_pad.get_shape())  # 输出为(1, 1, 1, 1)

通过这个例子,我们可以清楚地看到'SAME'和'VALID'填充方式的差异。

总结

本文介绍了深度学习中的'SAME'和'VALID'填充方式,并通过例子进行了说明。'SAME'填充方式在卷积操作中会对输入数据进行填充,以确保输出大小与输入大小相同;'VALID'填充方式在卷积操作中不进行填充操作,输出大小会根据输入数据大小、卷积核大小以及步长进行计算。这些填充方式在实际深度学习任务中非常常用,希望本文对你有所帮助。


相关文章推荐