Listruta
Dropout-funktion.
Dropout (x)
Parametrar
x
: indata för att tillämpa dropout-funktionen på
Obs! Avhoppsfrekvensen är inte en parameter för den här funktionen, utan anges i stället i SGD
avsnittet .
Returvärde
Dropout()
returnerar resultatet av den dropout-åtgärd som tillämpas på indata.
Resultatet har samma tensordimensioner som indata.
Description
Åtgärden Dropout()
väljer slumpmässigt element i indata med en angiven sannolikhet som kallas avhoppsfrekvens och anger dem till 0.
Detta har visat sig förbättra generaliserbarheten för modeller.
I CNTK implementering multipliceras de återstående värdena som inte är inställda på 0 i stället med (1 / (1 - avhoppsfrekvens)). På så sätt kan modellparametrarna som lärs in med avhopp tillämpas direkt i slutsatsdragning. (Om detta inte gjordes skulle användaren behöva skala dem manuellt före slutsatsdragningen.)
Om du vill aktivera avhopp i träningen måste du också lägga till en parameter dropoutRate
i SGD
avsnittet för att definiera avhoppsfrekvensen.
Detta görs i SGD
ett avsnitt, i stället för en parameter för Dropout()
sig själv, för att kunna starta en träning utan avhopp och sedan aktivera den efter några epoker, vilket är ett vanligt scenario.
För detta dropoutRate
anges som en vektor, där varje värde är för en specifik epok.
När du kör slutsatsdragning Dropout()
skickar åtgärden sina indata oförändrade (det är en no-op).
Exempel
Följande är ett enkelt convolutional-nätverk med ett avhoppslager mot slutet:
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)
Dessutom behöver du en motsvarande post i avsnittet SGD
.
I följande exempel definieras att ingen avhopp ska användas för de tre första epokerna och sedan fortsätta med en avhoppsfrekvens på 50 %.
För enkelhetens skull använder det här exemplet asterisksyntaxen (*
) för att ange upprepning:
SGD = {
...
dropoutRate = 0*3:0.5
...
}