11

Su Caffe, sto cercando di implementare una rete completamente convessa per la segmentazione semantica. Mi chiedevo c'è una strategia specifica per impostare le 'solver.prototxt' valori per i seguenti iper-parametri:Caffe | solver.prototxt valori impostazione strategia

  • test_iter
  • test_interval
  • iter_size
  • max_iter

Dipende da il numero di immagini che hai per il tuo set di allenamento? Se é cosi, come?

+0

Un altro parametro meta è 'weight_decay'. vedere [questo thread] (http://stackoverflow.com/q/32177764/1714410) su come impostarlo. – Shai

risposta

28

Per impostare questi valori in modo significativo, è necessario disporre di un paio di bit di informazioni per quanto riguarda i dati:

1. dimensioni training set il numero totale di esempi di addestramento avete, facciamo chiama questa quantità T.
2. Dimensione lotto di preparazione il numero di esempi di allenamento elaborati insieme in un singolo batch, in genere viene impostato dal livello dati di input in 'train_val.prototxt'. Ad esempio, in this file la dimensione del batch del treno è impostata su 256. Indichiamo questa quantità per tb.
3. Dimensione del set di convalida il numero totale di esempi che vengono messi da parte per la convalida del modello, denotiamo questo per V.
4. Validazione dimensione lotto valore impostato in batch_size per la fase TEST. In this example è impostato su 50. Chiamiamo questo vb.

Ora, durante l'allenamento, vorresti ottenere una stima unilaterale delle prestazioni della tua rete ogni tanto. Per farlo, esegui la rete sul set di convalida delle iterazioni test_iter. Per coprire l'intero set di convalida è necessario avere test_iter = V/vb.
Quanto spesso vorresti ottenere questa stima? Dipende davvero da te. Se hai un set di convalida molto grande e una rete lenta, la convalida troppo spesso renderà il processo di addestramento troppo lungo. D'altra parte, non convalidare abbastanza spesso può impedirti di notare se e quando il tuo processo di addestramento non è riuscito a convergere. test_interval determina la frequenza di convalida: in genere per le reti di grandi dimensioni si imposta test_interval nell'ordine di 5K, per le reti più piccole e più veloci è possibile scegliere valori più bassi. Di nuovo, tutto a te.

Per coprire l'intero set di allenamento (completando una "epoca") è necessario eseguire le iterazioni T/tb. Di solito si allena per diverse epoche, quindi max_iter=#epochs*T/tb.

Riguardo a iter_size: questo consente di ottenere gradienti medi su diversi mini lotti di addestramento, vedere this thread per ulteriori informazioni.

+2

Grazie mille! Ha cancellato così tante cose :) –

+0

@Shai - Grazie per l'esempio dettagliato. Sono ancora confuso a causa del mio caso d'uso di 'Caffe' con' AlexNet'. Ho un sistema con memoria '115GB' e usando' treno' e 'val' set di dati in LMDB da' ImageNet ILSVRC 2012'. Sto usando [questo file del risolutore] (https://github.com/intel/caffe/blob/master/models/intel_optimized_models/alexnet/solver.prototxt) con tutti i parametri dato che eccetto 'max_iteration = 100'.Non riesco a capire perché il consumo di memoria è di circa '10 GB'? Dovrebbe essere molto più piccolo poichè 'Caffe' funziona su un lotto di immagini, invece di dati completi. Qualche idea su come è fatto questo calcolo? –

+0

@ChetanArvindPatil sembra che tu stia confondendo i requisiti di archiviazione per i parametri del modello e l'utilizzo della RAM per il calcolo del treno/val. Caffe memorizza in memoria tutti ** i parametri ** + i loro derivati, inoltre memorizza ** dati ** (treno/val gruppi) e derivati ​​(per backprop). Alcuni solutori richiedono sempre spazio aggiuntivo per la velocità di apprendimento regolabile per parametro (ad esempio "Adam"). Tutti questi possono certamente richiedere un sacco di RAM. Vedi per es. [questo thread] (https://stackoverflow.com/q/36526959/1714410) – Shai