ฉันถูกมองที่เอกสารของ tensorflow เกี่ยวกับที่นี่tf.nn.conv2d
แต่ฉันไม่เข้าใจว่ามันทำอะไรหรือพยายามทำอะไร มันบอกในเอกสาร
# 1: แผ่ฟิลเตอร์เป็นเมทริกซ์ 2 มิติที่มีรูปร่าง
[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)
ฉันเข้าใจบิตและชิ้นส่วนของโครงข่ายประสาทเทียม ผมเรียนพวกเขาที่นี่ แต่การใช้งานบนเทนเซอร์โฟลว์ไม่ใช่สิ่งที่ฉันคาดหวัง มันก็เลยเกิดคำถามขึ้น
แก้ไข : ดังนั้นฉันจึงใช้โค้ดที่ง่ายกว่ามาก แต่ฉันคิดไม่ออกว่าเกิดอะไรขึ้น ฉันหมายความว่าผลลัพธ์เป็นเช่นนี้ จะเป็นประโยชน์อย่างยิ่งหากใครสามารถบอกฉันได้ว่ากระบวนการใดให้ผลลัพธ์นี้
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]]]]
tf.nn.conv2d()
ดังนั้นจึงไม่มีการใช้วิธีการที่เป็นปัญหาเลยเมื่อเราใช้ TF ที่รองรับ GPU เว้นแต่use_cudnn_on_gpu=False
จะระบุไว้อย่างชัดเจน