Qual è il concetto di colli di bottiglia di Tensorflow?


Risposte:


20

Il collo di bottiglia in una rete neurale è solo uno strato con meno neuroni rispetto allo strato sotto o sopra di esso. Avere un tale livello incoraggia la rete a comprimere le rappresentazioni delle caratteristiche per adattarsi meglio allo spazio disponibile, al fine di ottenere la migliore perdita durante l'allenamento.

In una CNN (come la rete Inception di Google), vengono aggiunti livelli di collo di bottiglia per ridurre il numero di mappe caratteristiche (dette "canali") nella rete, che altrimenti tendono ad aumentare in ogni livello. Ciò si ottiene utilizzando le convoluzioni 1x1 con meno canali di uscita rispetto ai canali di ingresso.

Di solito non si calcolano direttamente i pesi per i livelli di collo di bottiglia, il processo di allenamento lo gestisce, come per tutti gli altri pesi. Selezionare una buona dimensione per un livello collo di bottiglia è qualcosa che devi indovinare, quindi sperimentare, per trovare architetture di rete che funzionino bene. L'obiettivo qui è di solito trovare una rete che si generalizzi bene con le nuove immagini, e i livelli di collo di bottiglia aiutano a ridurre il numero di parametri nella rete pur permettendo che sia profondo e che rappresenti molte mappe di caratteristiche.


8

Immagina di voler ricalcolare l'ultimo strato di un modello pre-addestrato:

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

Per addestrare [Last-Layer-To-Re-Compute] , è necessario valutare più volte gli output di [Freezed-Layer] per un dato di input. Per risparmiare tempo, puoi calcolare queste uscite solo una volta .

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

Quindi, memorizzi tutte le strozzature-caratteristiche-di-input # i e le usi direttamente per addestrare [Last-Layer-To-Re-Compute].

Spiegazioni della funzione "cache_bottlenecks" dell'esempio "image_retraining":

Poiché è probabile che leggiamo la stessa immagine più volte (se non ci sono distorsioni applicate durante l'allenamento), è possibile velocizzare molto le cose se calcoliamo i valori del livello del collo di bottiglia una volta per ogni immagine durante la preelaborazione, quindi leggiamo solo quei valori memorizzati nella cache ripetutamente durante l'allenamento.


5

Il collo di bottiglia di Tensorflow è l'ultima fase preliminare prima dell'inizio della formazione effettiva con il riconoscimento dei dati. È una fase in cui una struttura di dati è formata da ciascuna immagine di addestramento che può aver luogo la fase finale di addestramento e distinguere l'immagine da ogni altra immagine utilizzata nel materiale di addestramento. Un po 'come un'impronta digitale dell'immagine.

È coinvolto nel comando di riqualificazione e, come suggerisce il nome, questo è il principale consumatore di tempo dell'esecuzione del comando. La quantità di materiale di formazione potrebbe dover essere compromessa se questo collo di bottiglia sembra richiedere troppo tempo.

Dato che è un comando da riga di comando, non conosco l'algoritmo esatto. Algoritmo è un codice pubblico in Github ma è presumibilmente così complicato (il tempo di esecuzione è molto lungo per definizione) che credo di non poterlo semplicemente scrivere in questo tipo di risposta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.