我正在查看關於tf.nn.conv2d
here的tensorflow文檔。但我無法理解它做了什麼或試圖達到什麼目的。它說的文檔,tf.nn.conv2d在tensorflow中做什麼?
#1:展平了過濾器的2-d矩陣與形狀
[filter_height * filter_width * in_channels, output_channels]
。
現在做了什麼?那是單元乘法還是純矩陣乘法?我也無法理解文檔中提到的其他兩點。我已經寫在下面這些:
#2:提取來自所述輸入圖像張量補丁以形成形狀
[batch, out_height, out_width, filter_height * filter_width * in_channels]
的虛擬張量。#3:對於每個修補程序,右乘過濾器矩陣和圖像修補程序向量。
如果有人可以舉一個例子,一段代碼(非常有幫助),並解釋那裏發生了什麼,以及爲什麼操作是這樣,這將是非常有幫助的。
我試過編碼一小部分,並打印出操作的形狀。不過,我不明白。
我想是這樣的:
op = tf.shape(tf.nn.conv2d(tf.random_normal([1,10,10,10]),
tf.random_normal([2,10,10,10]),
strides=[1, 2, 2, 1], padding='SAME'))
with tf.Session() as sess:
result = sess.run(op)
print(result)
我瞭解位和卷積神經網絡的碎片。我研究了它們here。但是張量流的實現並不是我所期望的。所以它提出了這個問題。
編輯: 所以,我實現了一個更簡單的代碼。但我無法弄清楚發生了什麼事。我的意思是結果如何。如果有人能告訴我什麼過程產生這個輸出,那將是非常有幫助的。
input = tf.Variable(tf.random_normal([1,2,2,1]))
filter = tf.Variable(tf.random_normal([1,1,1,1]))
op = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='SAME')
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
print("input")
print(input.eval())
print("filter")
print(filter.eval())
print("result")
result = sess.run(op)
print(result)
輸出
input
[[[[ 1.60314465]
[-0.55022103]]
[[ 0.00595062]
[-0.69889867]]]]
filter
[[[[-0.59594476]]]]
result
[[[[-0.95538563]
[ 0.32790133]]
[[-0.00354624]
[ 0.41650501]]]]
實際上cudnn在'tf.nn.conv2d()'中是GPU默認啓用的,所以當我們使用支持GPU的TF時,根本不會使用所討論的方法,除非明確指定'use_cudnn_on_gpu = False'。 – gkcn