一些填充步幅 1
填充只是一個奇特的名稱:用一些常量圍繞輸入矩陣。在大多數情況下,常量為零,這就是人們稱之為零填充的原因。因此,如果你想在我們的原始輸入中使用 1 的填充(使用 padding=0, strides=1
檢查第一個示例),矩陣將如下所示:
要計算卷積的值,請執行相同的滑動。請注意,在我們的情況下,中間的許多值不需要重新計算(它們將與前面的示例相同。我也不會在此顯示所有計算,因為這個想法很簡單。結果是:
哪裡
- 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)
你可以驗證答案是否與手動計算的答案相同。