2

Gibt es eine Möglichkeit, unbeaufsichtigte Funktionen aus einer Reihe von Bildern zu lernen. Ähnlich wie Word2vec oder doc2vec, wo neuronales Netzwerk erlernt wird und neue Dokumente erhalten, erhalten wir seine Eigenschaften.Wie kann man nach dem Trainieren eines neuronalen Netzes ein Bild für ein Bild extrahieren?

Ähnlich wie in diesem Beispiel erwartet https://dato.com/learn/gallery/notebooks/food_retrieval-public.html zeigt, dass er gelernte NN-Modell laden und Funktionen für neue Bilder vorhersagen kann.

Gibt es ein einfaches Beispiel, wie cnn über Bilder zu implementieren und ihre Funktionen zurück zu bekommen, hilft !!

Angenommen in diesem Beispiel https://github.com/fchollet/keras/blob/master/examples/mnist_cnn.py Wenn ich cnn Funktionen für alle X_train und X_test bekommen möchte ... gibt es eine Möglichkeit? Wenn wir auch Gewichte pro Schicht pro Bild bekommen können, können wir sie stapeln und als Features verwenden. In diesem Fall gibt es eine Möglichkeit, das Gleiche zu erreichen. Die Verwendung dieser Funktionen für unbeaufsichtigte Aufgaben wäre einfacher, wenn wir sie als Vektoren betrachten.

Antwort

1

Wenn ich Ihre Frage richtig verstanden habe, ist diese Aufgabe in einem tiefen Lernfeld ziemlich üblich. Im Falle von Bildern, was ich für das Beste halte, ist ein Faltungsautokodierer. Sie können über diese Architektur lesen, z. hier

http://people.idsia.ch/~ciresan/data/icann2011.pdf

Vorherige Version von Keras unterstützt diese Architektur als eine der Kernschichten, obwohl von der Version 1.0 Ich habe bemerkt, dass es aus den Unterlagen verschwunden. Aber - es ist immer noch ziemlich einfach, es von Grund auf zu bauen :)

In noildage Fälle gibt es auch andere Ansätze wie z. Eingeschränkte Boltzmann-Maschinen.

UPDATE:

Wenn es darum geht, welche Art von Aktivierungen das Beste für den Erhalt neue Funktionen von neuronalen Netzwerk-Aktivierungen ist - aus meiner persönlichen Erfahrung - es auf der Größe des Netzes abhängt, die Sie verwenden. Wenn Sie ein Netzwerk verwenden, dessen letzte Schicht breit ist (viele Knoten), kann es nützlich sein, nur die letzte Schicht zu erhalten (aufgrund der Anzahl der Parameter, wenn Sie auch vorherige Schichten berücksichtigen möchten - dies kann die Lernleistung beeinträchtigen). Aber - wenn (wie bei einigen MNIST-Netzwerken) Ihre letzte Schicht für diese Aufgabe nicht ausreicht - können Sie versuchen, auch vorherige Schichtenaktivierung oder sogar alle Netzaktivität zu verwenden. Um ehrlich zu sein - ich erwarte in diesem Fall nicht viel Verbesserung - aber Sie können es versuchen. Ich denke, dass Sie beide Ansätze verwenden sollten - beginnend mit den Aktivierungen der letzten Schicht - und dann versuchen, das Verhalten Ihres neuen Klassifikators zu überprüfen, wenn Sie Aktivierungen von vorherigen Layern hinzufügen.

Was ich Ihnen dringend empfehlen wird, ist auch erhalten einige Erkenntnisse aus, welche Art von Funktionen Netzwerk lernt - mit T-SNE Einbettungen davon Aktivierungen. In vielen Fällen fand ich es nützlich - z. Überprüfen, ob die Größe einer Ebene ausreicht. Mit T-SNE können Sie prüfen, ob die von der letzten Schicht erhaltenen Funktionen Ihre Klassen gut diskriminieren. Es kann Ihnen auch gute Einsichten über Ihre Daten geben und welche neuronalen Netzwerke wirklich lernen (neben erstaunlichen Visualisierungen :))

+0

Danke @Marcin .. Ich werde in das Papier schauen. Was ich verstehen wollte, war wie in Word2vec die letzte Ebene zu entfernen und nur versteckte Ebenengewichte als Features zu nehmen ... Für Bilder hält das immer noch ODER müssen wir die Gewichte aus allen Layern nehmen? Und über Keras v1.0 hat große Veränderungen ... Ich sehe nicht auch Auto-Encoder! –

+1

Kühl. Visualisierung ist eine gute Idee, um die Bedeutung von Features aus bestimmten Ebenen zu verstehen. Danke für die aktualisierte Antwort. Ich bewege mich vom flachen Netzwerk zum tiefen Netzwerk ... daher so viele Fragen !! Danke noch einmal !! –