Ich habe mir tf.nn.conv2d
hier die Dokumente von Tensorflow angesehen . Aber ich kann nicht verstehen, was es tut oder was es zu erreichen versucht. Es steht auf den Dokumenten,
# 1: Glättet den Filter zu einer 2-D-Matrix mit Form
[filter_height * filter_width * in_channels, output_channels]
.
Was macht das nun? Ist das eine elementweise Multiplikation oder nur eine einfache Matrixmultiplikation? Ich konnte auch die beiden anderen in den Dokumenten erwähnten Punkte nicht verstehen. Ich habe sie unten geschrieben:
# 2: Extrahiert Bildfelder aus dem Eingangstensor, um einen virtuellen Formtensor zu bilden
[batch, out_height, out_width, filter_height * filter_width * in_channels]
.# 3: Für jedes Patch multipliziert rechts die Filtermatrix und den Bild-Patch-Vektor.
Es wäre wirklich hilfreich, wenn jemand ein Beispiel geben könnte, vielleicht einen Code (äußerst hilfreich) und erklären könnte, was dort vor sich geht und warum die Operation so ist.
Ich habe versucht, einen kleinen Teil zu codieren und die Form der Operation auszudrucken. Trotzdem kann ich nicht verstehen.
Ich habe so etwas versucht:
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)
Ich verstehe Teile von Faltungs-Neuronalen Netzen. Ich habe sie hier studiert . Aber die Implementierung von Tensorflow entspricht nicht meinen Erwartungen. Also warf es die Frage auf.
EDIT : Also habe ich einen viel einfacheren Code implementiert. Aber ich kann nicht herausfinden, was los ist. Ich meine, wie die Ergebnisse so sind. Es wäre äußerst hilfreich, wenn mir jemand sagen könnte, welcher Prozess diese Ausgabe liefert.
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)
Ausgabe
input
[[[[ 1.60314465]
[-0.55022103]]
[[ 0.00595062]
[-0.69889867]]]]
filter
[[[[-0.59594476]]]]
result
[[[[-0.95538563]
[ 0.32790133]]
[[-0.00354624]
[ 0.41650501]]]]
tf.nn.conv2d()
, daher wird die betreffende Methode überhaupt nicht verwendet, wenn TF mit GPU-Unterstützung verwendet wird, esuse_cudnn_on_gpu=False
sei denn, dies ist explizit angegeben.