Der Tensorflow-Code ist nicht wie Ihre herkömmliche Programmiersprache. Zuerst wird ein Diagramm aus dem Code erstellt (die Tensorboard visualisiert werden kann verwenden, und aktualisieren Sie dann Regeln verwenden backpropagation berechnet, die intern umgesetzt wurde
Wenn Sie schreiben:.
h = tf.nn.conv2D(x, W, strides=[1, 1, 1, 1], padding='SAME')
es schafft eine Faltungs Ebene in Ihrem neuronalen Netzwerk, die Faltung (http://cs231n.github.io/convolutional-networks/) auf Ihrer Eingabematrix durchführt und das Ergebnis in h ausgibt Nun ist der ganze Zweck der Durchführung solcher Faltungen, einige lokale Muster wie vertikale oder horizontale Kanten im Bild zu identifizieren. Zum Beispiel eine Gewichtsmatrix W wie
W = [[0,1,0],[0,1,0],[0,1,0]]
würde vertikale Kanten im Bild identifizieren. Da jedoch W wurde zufällig hier initialisiert
W = tf.Variable(tf.truncated_normal(shape, stddev=0.1)))
würde jedes Muster nicht in der Lage sein, am Anfang zu finden. Dies wird durch Backpropagation gelöst.
Beim Zug Ihr neuronales Netzwerk auf einem markierten Daten, bei jedem Schritt die Matrix W so aktualisiert wird, dass die Ableitung des E w.r.t W Fehler reduziert wird. Sie können nicht sehen, dass es in Ihrem Code passiert, da die Backpropagation intern in Tensorflow implementiert ist und Sie nur Code für den Weiterleitungsdurchlauf schreiben müssen. Wenn Sie W als
W = tf.Variable(tf.truncated_normal(shape, stddev=0.1)),trainable=False)
definiert wird es nicht aktualisiert werden, aber dann wird der gesamte Zweck der Parameter Ausbildung würden besiegt werden.
Ich empfehle Ihnen, durch http://neuralnetworksanddeeplearning.com gehen, um zu verstehen, wie neuronale Netzwerke arbeiten, bevor Sie mit Tensorflow fortfahren.
Können Sie Ihren Code posten, wie/wann Sie Ihre Gewichtswerte überprüfen und welcher Teil für Verwirrung sorgt? Gewichte in CNN werden erst nach dem Rückwärtsdurchlauf aktualisiert. Wenn also "conv2D" während des Trainings tatsächlich ausgewertet wird, faltet es den Kernel (Gewichte) über die Eingabe, um Feature-Maps (keine Gewichte) zurückzugeben - dies ist der Vorwärtsdurchlauf. Dann wird ein Rückwärtsdurchlauf ausgeführt, um Gradienten zu bewerten und die Gewichte tatsächlich zu aktualisieren – Simon