簡體   English   中英

張量流計算 tf.nn.conv2d

[英]tensorflow compute tf.nn.conv2d

我已經在 Excel 中手動計算了 3x3 圖像和兩個 2x2 過濾器之間的卷積:

在此處輸入圖片說明

我想使用 tensorflow tf.nn.conv2d:重現相同的結果tf.nn.conv2d:

x_raw = np.array([
    [2,5,3],
    [3,4,2],
    [4,1,1]
])

f_raw = np.array(
[[
    [2,1],
    [3,4]
],[
    [4,1],
    [1,2]   
]])

f = tf.constant(f_raw, dtype=tf.float32)
x = tf.constant(x_raw, dtype=tf.float32)

filter = tf.reshape(f, [2, 2, 1, 2])
image  = tf.reshape(x, [1, 3, 3, 1])

tf.nn.conv2d(image, filter, [1, 1, 1, 1], "VALID").eval()

但是我從 tensorflow 得到的輸出是關閉的:

數組([[[[35.,33.],[37.,25.]],[[35.,25.],[19.,15.]]]], dtype=float32)

我做錯了什么?

要獲得與 excel 示例相同的結果,您需要進行以下更改:

  1. 創建兩個單獨的權重
  2. 分別計算每個權重的卷積

代碼示例:

x_raw = np.array([
    [2,5,3],
    [3,4,2],
    [4,1,1]
])
#created two seperate weights 
weight1 = np.array(
[[
    [2,1],
    [3,4]
]])

weight2 = np.array(
[[
    [4,1],
    [1,2]
]]
)
weight1 = tf.constant(weight1, dtype=tf.float32)
weight2 = tf.constant(weight2, dtype=tf.float32)
x = tf.constant(x_raw, dtype=tf.float32)

#change out_channels to 1 
filter1 = tf.reshape(weight1, [2, 2, 1, 1])
filter2 = tf.reshape(weight2, [2, 2, 1, 1])
image = tf.reshape(x, [1, 3, 3, 1])

with tf.Session() as sess:
  print(tf.nn.conv2d(image, filter1, [1, 1, 1, 1], "VALID").eval())
  print(tf.nn.conv2d(image, filter2, [1, 1, 1, 1], "VALID").eval())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM