Ich habe versucht, die Gewichte wie so nur die ersten 25 anzuzeigen. Ich habe die gleiche Frage, die Sie tun, ist dies der Filter oder etwas anderes. Es scheint sich nicht um die gleichen Filter zu handeln, die aus tiefen Glaubensnetzwerken oder gestapelten RBMs stammen.
Hier ist die untrainierten visualisiert Gewichte:
und hier werden die trainierten Gewichte:
Seltsamer gibt es keine Änderung nach dem Training! Wenn Sie sie vergleichen, sind sie identisch.
und dann die DBN RBM filtert Schicht 1 auf der Oberseite und der Schicht 2 auf der Unterseite:
Wenn i gesetzt kernel_intialization = „Einsen“ dann bekomme ich Filter, die gut aussehen, aber der Nettoverlust verringert sich allerdings nie mit vielen Versuchs- und Fehleränderungen:
Hier ist der Code zum Anzeigen der 2D Conv Gewichte/Filter.
ann = Sequential()
x = Conv2D(filters=64,kernel_size=(5,5),input_shape=(32,32,3))
ann.add(x)
ann.add(Activation("relu"))
...
x1w = x.get_weights()[0][:,:,0,:]
for i in range(1,26):
plt.subplot(5,5,i)
plt.imshow(x1w[:,:,i],interpolation="nearest",cmap="gray")
plt.show()
ann.fit(Xtrain, ytrain_indicator, epochs=5, batch_size=32)
x1w = x.get_weights()[0][:,:,0,:]
for i in range(1,26):
plt.subplot(5,5,i)
plt.imshow(x1w[:,:,i],interpolation="nearest",cmap="gray")
plt.show()
--------------------------- UPDATE ----- -------------------
Also habe ich es nochmal mit einer Lernrate von 0.01 statt 1e-6 versucht und die Bilder zwischen 0 und 1 normalisiert statt 0 und 255, indem die Bilder durch 255,0 geteilt werden.Nun werden die Faltungsfilter ändern und die Ausgabe des ersten Faltungsfilter sieht so aus:
Der gelernte Filter werden Sie feststellen, geändert wird (nicht viel) mit einer angemessenen Lernrate:
Hier ist Bild sieben der CIFAR-10 Test-Set:
Und hier die Ausgabe der ersten Faltungsschicht:
Und wenn ich nehmen Sie die letzte Windung Laye r (keine dichten Schichten dazwischen) und es einem nicht klassifizierten Klassifikator zuführen, ist es ähnlich, rohe Bilder hinsichtlich der Genauigkeit zu klassifizieren, aber wenn ich die Faltungsschichten trainiere, erhöht die Ausgabe der letzten Faltungsschicht die Genauigkeit des Klassifikators (zufällige Gesamtstruktur).
Also würde ich schlussfolgern, die Faltungsschichten sind in der Tat Filter sowie Gewichte.
Danke für Ihre Antwort! Es ist eine seltsame Sache hier: Gewichte sind im Falle einer zufälligen Initialisierung ähnlich. Ich verwende Glorot-Initialisierung, die für Conv-Layer empfohlen wird. Die verwirrendste Frage für mich ist: Wir trainieren das Netzwerk, aber wir erleben dieselben Gewichte. Was haben wir trainiert? Habe keine Antwort dafür ... –
Was ist also die dritte Dimension der Gewichte? In 'x1w = x.get_weights() [0] [:,:, 0,:]', die 0 in '[:,:, 0,:]' '. Ich denke, die ersten zwei Dims sind der Kernel x und y, und der letzte ist die Anzahl der Kernel - aber ich habe keine Ahnung, was die 3. Dimension ist. Es scheint die Dimension der Ausgabe der vorherigen Ebene zu sein, aber ich verstehe nicht warum oder was das wirklich bedeutet. – wordsforthewise
Die 0 ist der rote Kanal. Die drei Dimensionen sind rot, grün und blau. Der erste ist x der zweite ist y der dritte ist Kanal und der letzte ist der n-ten Windungsschicht. – John