Was ist das Konzept von Tensorflow-Engpässen?

12

Was ist das Konzept und wie berechnet man Engpasswerte? Wie helfen diese Werte bei der Bildklassifizierung? Bitte erklären Sie in einfachen Worten.

Anurag Singh
quelle

Antworten:

20

Der Engpass in einem neuronalen Netzwerk ist nur eine Schicht mit weniger Neuronen als die Schicht darunter oder darüber. Eine solche Schicht ermutigt das Netzwerk, Feature-Darstellungen so zu komprimieren, dass sie am besten in den verfügbaren Speicherplatz passen, um den besten Verlust während des Trainings zu erzielen.

In einem CNN (wie dem Inception-Netzwerk von Google) werden Engpass-Layer hinzugefügt, um die Anzahl der Feature-Maps (auch als "Kanäle" bezeichnet) im Netzwerk zu verringern, die ansonsten in jedem Layer tendenziell zunehmen. Dies wird erreicht, indem 1x1-Windungen mit weniger Ausgangskanälen als Eingangskanälen verwendet werden.

Normalerweise berechnen Sie Gewichte für Engpassschichten nicht direkt, der Trainingsprozess behandelt dies wie für alle anderen Gewichte. Die Auswahl einer guten Größe für eine Engpassschicht ist etwas, das Sie erraten und dann experimentieren müssen, um Netzwerkarchitekturen zu finden, die gut funktionieren. Das Ziel hierbei ist normalerweise, ein Netzwerk zu finden, das sich gut auf neue Bilder verallgemeinern lässt, und Engpass-Layer helfen, indem sie die Anzahl der Parameter im Netzwerk reduzieren und gleichzeitig zulassen, dass es tief ist und viele Feature-Maps darstellt.

Neil Slater
quelle
8

Stellen Sie sich vor, Sie möchten die letzte Ebene eines vorab trainierten Modells neu berechnen:

Input->[Freezed-Layers]->[Last-Layer-To-Re-Compute]->Output

Um [Last-Layer-To-Re-Compute] zu trainieren , müssen Sie die Ausgaben von [Freezed-Layers] für bestimmte Eingabedaten mehrmals auswerten . Um Zeit zu sparen, können Sie diese Ausgaben nur einmal berechnen .

Input#1->[Freezed-Layers]->Bottleneck-Features-Of-Input#1

Anschließend speichern Sie alle Engpass-Features-Of-Input # i und verwenden sie direkt zum Trainieren von [Last-Layer-To-Re-Compute].

Erläuterungen zur Funktion "cache_bottlenecks" des Beispiels "image_retraining":

Da wir wahrscheinlich dasselbe Bild mehrmals lesen (wenn während des Trainings keine Verzerrungen auftreten), kann dies die Dinge erheblich beschleunigen, wenn wir die Engpassschichtwerte für jedes Bild während der Vorverarbeitung einmal berechnen und dann nur die zwischengespeicherten Werte lesen wiederholt während des Trainings.

JC R.
quelle
4

Der Tensorflow-Engpass ist die letzte Phase vor dem eigentlichen Training mit Datenerkennung. In einer Phase, in der aus jedem Trainingsbild eine Datenstruktur gebildet wird, kann die letzte Trainingsphase stattfinden und das Bild von jedem anderen im Trainingsmaterial verwendeten Bild unterscheiden. Etwas wie ein Fingerabdruck des Bildes.

Es ist an dem Umschulungsbefehl beteiligt, und wie der Name schon sagt, ist dies der Hauptzeitverbraucher der Befehlsausführung. Die Menge an Schulungsmaterial muss möglicherweise kompromittiert werden, wenn dieser Engpass zu zeitaufwändig erscheint.

Da es sich um einen Befehlszeilenbefehl handelt, kenne ich den genauen Algorithmus nicht. Der Algorithmus ist in Github im Code öffentlich, aber angeblich so kompliziert (die Ausführungszeit ist per Definition sehr lang), dass ich glaube, ich kann ihn nicht einfach in diese Art von Antwort schreiben.

mico
quelle