Saya melihat dokumen tensorflow tentang di tf.nn.conv2d
sini . Tetapi saya tidak dapat memahami apa yang dilakukannya atau apa yang ingin dicapai. Dikatakan di dokumen,
# 1: Meratakan filter ke matriks 2-D dengan bentuk
[filter_height * filter_width * in_channels, output_channels]
.
Sekarang apa fungsinya? Apakah itu perkalian bijak atau hanya perkalian matriks biasa? Saya juga tidak dapat memahami dua poin lainnya yang disebutkan dalam dokumen. Saya telah menuliskannya di bawah ini:
# 2: Mengekstrak patch citra dari tensor input untuk membentuk tensor virtual
[batch, out_height, out_width, filter_height * filter_width * in_channels]
.# 3: Untuk setiap tambalan, perbanyak kanan matriks filter dan vektor tambalan gambar.
Akan sangat membantu jika ada yang bisa memberikan contoh, sepotong kode (sangat membantu) mungkin dan menjelaskan apa yang terjadi di sana dan mengapa operasinya seperti ini.
Saya sudah mencoba mengkodekan sebagian kecil dan mencetak bentuk operasi. Tetap saja, saya tidak bisa mengerti.
Saya mencoba sesuatu seperti ini:
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)
Saya memahami potongan-potongan jaringan saraf konvolusional. Saya mempelajarinya di sini . Tetapi implementasi pada tensorflow tidak seperti yang saya harapkan. Jadi itu menimbulkan pertanyaan.
EDIT : Jadi, saya menerapkan kode yang lebih sederhana. Tapi saya tidak tahu apa yang sedang terjadi. Maksud saya bagaimana hasilnya seperti ini. Akan sangat membantu jika ada yang bisa memberi tahu saya proses apa yang menghasilkan keluaran ini.
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)
keluaran
input
[[[[ 1.60314465]
[-0.55022103]]
[[ 0.00595062]
[-0.69889867]]]]
filter
[[[[-0.59594476]]]]
result
[[[[-0.95538563]
[ 0.32790133]]
[[-0.00354624]
[ 0.41650501]]]]
tf.nn.conv2d()
, jadi metode yang dimaksud tidak digunakan sama sekali ketika kita menggunakan TF dengan dukungan GPU, kecualiuse_cudnn_on_gpu=False
ditentukan secara eksplisit.