Dropout

Funzione a discesa.

Dropout (x)

Parametri

  • x: input per applicare la funzione a discesa a

Nota: la frequenza di rilascio non è un parametro per questa funzione, ma specificata nella SGD sezione.

Valore restituito

Dropout() restituirà il risultato dell'operazione di eliminazione applicata all'input. Il risultato ha le stesse dimensioni del tensore dell'input.

Descrizione

L'operazione Dropout() seleziona in modo casuale gli elementi dell'input con una determinata probabilità denominata frequenza di eliminazione e le imposta su 0. Questo è stato dimostrato per migliorare la generalizzabilità dei modelli.

Nell'implementazione di CNTK, i valori rimanenti che non sono impostati su 0 verranno invece moltiplicati con (1 / (1 - frequenza di rilascio)). In questo modo, i parametri del modello appresi con l'eliminazione sono direttamente applicabili nell'inferenza. Se non è stato fatto, l'utente dovrà ridimensionarli manualmente prima dell'inferenza.

Per abilitare l'eliminazione nel training, è anche necessario aggiungere un parametro dropoutRate alla SGD sezione per definire la frequenza di rilascio. Questa operazione viene eseguita in una sezione, anziché un parametro per Dropout() se stesso, per consentire l'avvio SGD di un training senza rilascio e quindi abilitarlo dopo alcuni periodi, ovvero uno scenario comune. Per questo motivo, l'oggetto dropoutRate viene specificato come vettore, in cui ogni valore è per un periodo specifico.

Quando si esegue l'inferenza, l'operazione Dropout() passa il relativo input non modificato (non è un'operazione op).

Esempio

Di seguito è riportata una semplice rete convoluzionale con un livello a discesa verso la fine:

features = Input{...}
c = ConvolutionalLayer {32, (5:5), activation=ReLU} (features)
p = MaxPoolingLayer {(3:3), stride = (2:2)} (c)
h = DenseLayer {64, activation = ReLU} (p)
d = Dropout (h)
z = LinearLayer {10} (d)

È inoltre necessaria una voce corrispondente nella SGD sezione. L'esempio seguente definisce l'uso di nessun dropout per i primi 3 periodi e quindi per continuare con un tasso di rilascio del 50%. Per praticità, questo esempio usa la sintassi asterisco (*) per indicare la ripetizione:

SGD = {
    ...
    dropoutRate = 0*3:0.5
    ...
}