Condividi tramite


Ricerca per categorie esprimere le cose in BrainScript

Ottenere una bella evidenziazione della sintassi per i file di configurazione BrainScript

Ecco come eseguire questa operazione se si usa vim. Altri editor dovrebbero essere simili

:set syntax=conf

Questo non è perfetto, ma è molto meglio di nessuna evidenziazione della sintassi. Se si sa come scrivere un .vim file di sintassi, inviare una richiesta pull.

In Emacs, conf-mode è più adatto. Per passare, premere M-x per iniziare a immettere i comandi, quindi immettere conf-mode. In Windows Emacs, c'è anche conf-windows-mode, tuttavia tale modalità sembra talvolta confusa da caratteri speciali nei commenti.

Esprimere la frequenza di errore del classificatore binario

Non usare ClassificationError perché funziona solo per le etichette multiclasse. Usando gli operatori aritmetici e logici standard, è possibile esprimere questa operazione come

err = (label != (prediction > 0.5))
...
evaluationNodes = (err)  

dove si presuppone che la stima sia una stima della probabilità della classe positiva data l'input.

Esprimere una softmax con un parametro di temperatura

Una softmax di temperatura è molto facile in BrainScript

TemperatureSoftmax (z, T) = Softmax (z / Constant (T))

Esprimere un meccanismo di controllo

Il modo più semplice consiste nell'usare

BS.Boolean.If (condition, thenExpression, elseExpression)

che funziona con scalari e tensori (tutti gli argomenti possono trasmettere).

Esprimere una softmax su un asse dinamico

Una softmax su un asse dinamico può essere eseguita tramite una ricorrenza:

BrainScript:

SoftMaxOverSequence (z) = {
    # define a recursive expression for \log(\sum_{i=1}^t \exp(z_i))
    runningLogSumExp = LogPlus (z,
                           PastValue (0, runningLogSumExp, defaultHiddenActivation=-1e30)) 
    logSumExp = If (BS.Loop.IsLast (runningLogSumExp),  # if last entry
                /*then*/ runningLogSumExp,              # then copy that
                /*else*/ FutureValue (0, logSumExp))    # else just propagate to the front
    result = Exp (z - logSumExp)
}.result

Implementare zoneout

Ci si potrebbe chiedere se dropout applicato a una costante viene valutato in modo dinamico. Lo è! Di conseguenza Zoneout è semplice come

Zoneout (x, xprev) =
{
    mask = Dropout (BS.Constants.OnesLike (x))
    res = BS.Boolean.If (mask, xprev, x)
}.res

Creare un tensore 3D costante

Voglio creare un tensore 3D costante in CNTK. Ho imparato a produrre matrici costanti 1D e 2D, posso impilarle (concatenarle o combinarle) e ripeterle. Ora devo impilare i tensori 2D per creare un tensore 3D?

Si supponga di avere tre tensori, ad esempio

A = ParameterTensor {100:200}
B = ParameterTensor {100:200}
C = ParameterTensor {100:200}

È ora possibile dire

    ABC = Splice (A:B:C, axis=3)

che ti darà un tensore [100 x 200 x 3].

(Se, d'altra parte, avevi detto Splice (A:B:C, axis=1), otterresti un tensore [300 x 200] e Splice (A:B:C, axis=2) ti otterrebbe un tensore [100 x 600].

Si noti che per eseguire la giunzione in una nuova dimensione, le dimensioni di tutti gli input devono corrispondere. Ad esempio, non è possibile impilare un parameterTensor {100:200} e un parameterTensor {100:50} lungo l'asse 3 (ma è possibile impilarlo lungo l'asse 2, che darebbe un tensore [100 x 250].

Si noti anche che gli indici dell'asse sono basati su 1, ad esempio in matematica. Ad esempio, la dimensione di riga di una matrice è il primo asse, axis=1 e la dimensione della colonna è il secondo asse, axis=2.

Interpretare la perdita di training

In che modo CNTK calcolare la perdita di training (in grassetto) al termine di un periodo? Il modello finale passa attraverso l'intero set di training per ottenere il valore oppure esegue semplicemente la media delle perdite di training miniBatch prodotte dal modello durante l'aggiornamento durante l'epoca?

Finished Epoch[ 1 of 100]: [Training] CE = 0.15920662 * 59999999; totalSamplesSeen = 59999999; learningRatePerSample = 9.9999997e-05; epochTime=641.392s
Final Results: Minibatch[1-3510]: CE = 0.32190538 * 3592929
Finished Epoch[ 1 of 100]: [Validate] CE = 0.32190538 * 3592929

La risposta è la seconda (dove la media è ponderata dai campioni nel minibatch nel caso siano a lunghezza variabile). Ad esempio, non si ottiene la perdita di training effettiva del modello nello stato in cui si trova alla fine dell'epoca.