一些填充步幅 1

填充只是一個奇特的名稱:用一些常量圍繞輸入矩陣。在大多數情況下,常量為零,這就是人們稱之為零填充的原因。因此,如果你想在我們的原始輸入中使用 1 的填充(使用 padding=0, strides=1 檢查第一個示例),矩陣將如下所示:

StackOverflow 文件

要計算卷積的值,請執行相同的滑動。請注意,在我們的情況下,中間的許多值不需要重新計算(它們將與前面的示例相同。我也不會在此顯示所有計算,因為這個想法很簡單。結果是:

StackOverflow 文件

哪裡

  • 5 = 0 * 1 + 0 * 0 + 0 * 1 + 0 * 2 + 4 * 1 + 3 * 0 + 0 * 0 + 0 * 1 + 1 * 1
  • 6 = 4 * 1 + 1 * 0 + 0 * 1 + 0 * 2 + 2 * 1 + 0 * 0 + 0 * 0 + 0 * 0 + 0 * 1

TF 不支援 conv2d 函式中的任意填充,因此如果需要一些不支援的填充,請使用 tf.pad() 。幸運的是,對於我們的輸入,填充 SAME 將等於 padding = 1.因此我們需要在前面的示例中幾乎不做任何改變:

res = tf.squeeze(tf.nn.conv2d(image, kernel, [1, 1, 1, 1], "SAME"))
# 'SAME' makes sure that our output has the same size as input and 
# uses appropriate padding. In our case it is 1.
with tf.Session() as sess:
   print sess.run(res)

你可以驗證答案是否與手動計算的答案相同。