Parametry i stałe
Parametrtensor{}
Tworzy skalarny, wektor, macierz lub tensor parametrów, które można nauczyć.
ParameterTensor {shape,
init='uniform'/*|heNormal|...*/, initOutputRank=1, initValueScale=1.0,
randomSeed=-1,
initValue=0.0, initFromFilePath='',
learningRateMultiplier=1.0}
Parametry
shape
: kształt (wymiary) parametru jako tablica. Na przykład(13:42)
aby utworzyć macierz z 13 wierszami i 42 kolumnami. W przypadku niektórych operacji wymiary podane jako 0 są automatycznie wnioskowane (zobacz tutaj)init
(domyślny "uniform"): określa inicjowanie losowe, np.init='heNormal'
(zobacz tutaj)initOutputRank
(wartość domyślna 1): określa liczbę wiodących osi wentylatora. Jeśli ujemna, -liczba końcowych osi wentylatora (zobacz tutaj)initValueScale
(wartość domyślna 1): dodatkowy współczynnik skalowania stosowany do losowych wartości inicjowaniarandomSeed
(wartość domyślna -1): jeśli dodatnie, użyj tego losowego inicjatora do inicjowania losowego. Jeśli ujemna, użyj licznika, który jest zwiększany dla każdego z nichParameterTensor{}
initValue
: określa inicjowanie z wartością stałą, np.initValue=0
initFromFilePath
: określa inicjowanie przez załadowanie wartości początkowych z pliku. Przykład.initFromFilePath="my_init_vals.txt"
learningRateMultiplier
: współczynnik uczenia systemowego będzie skalowany przez tę wartość (0, aby wyłączyć naukę) (zobacz tutaj)
Wartość zwracana
Tensor uczenia się parametrów.
Opis
Ta funkcja fabryki tworzy skalarną, wektorową, macierzową lub tensorowe parametry do nauki, czyli tensor rozpoznawany przez "train"
akcję jako zawierający parametry, które są aktualizowane podczas trenowania.
Wartości zostaną zainicjowane, w zależności od tego, który opcjonalny parametr jest podany, do
- liczby losowe, jeśli
init
zostanie podane; - stała, jeśli
initValue
jest podana; lub - tensor odczytany z zewnętrznego pliku wejściowego, jeśli
initFromFilePath
zostanie podany. Wartość domyślna toinit="uniform"
.
Aby utworzyć skalarny, wektor, macierz lub tensor z klasyfikacją>2, przekaż następujące polecenie jako shape
parametr:
(1)
dla skalarnego;(M)
dla wektora kolumny z elementamiM
;(1:N)
dla wektora wiersza z elementamiN
. Wektory wierszy to macierze jednorzędowe;(M:N)
dla macierzy z wierszami iI
kolumnamiN
;(I:J:K...)
dla tensora dowolnej rangi>2 (uwaga: maksymalna dozwolona ranga wynosi 12); i(W:H:C)
dla tensoru, który pasuje do wymiarów[W x H]
obrazu z kanałamiC
.
Automatyczne wnioskowanie wymiarów
Gdy element ParameterTensor
jest używany dla wag jako natychmiastowego wejścia określonych operacji, może określić niektóre wymiary jako Inferred
. Na przykład produkt ParameterTensor{42:Inferred} * x)
macierzy automatycznie wywnioskuje drugi wymiar równy wymiarowi x
.
Jest to bardzo przydatne w przypadku danych wejściowych warstw, ponieważ zwalnia kod BrainScript użytkownika z obciążenia związanego z przekazywaniem wymiarów wejściowych. Ponadto w niektórych sytuacjach bardzo kłopotliwe jest określenie dokładnych wymiarów wejściowych warstwy, na przykład dla pierwszej w pełni połączonej warstwy na szczycie piramidy kombinacji konwolucji/puli bez dopełnienia, gdzie każda operacja konwolucji i puli może porzucić wiersze lub kolumny pikseli granic i przeskalować wymiary.
Ta funkcja umożliwia określenie wstępnie zdefiniowanych warstw CNTK tylko przez ich wymiar wyjściowy (np. DenseLayer
{1024}
).
Inicjowanie losowe
Losowe inicjowanie jest wybierane przez init
parametr, który wybiera między równomiernym i normalnym rozkładem, gdzie zakres/odchylenie standardowe jest obliczane jako funkcja wentylatora i wentylatora:
wartość init |
Dystrybucji | zakres/odchylenie standardowe |
---|---|---|
"heNormal" | Normalne | sqrt (2 / fanIn) |
"heUniform" | Jednolite | sqrt (6 / fanIn) |
"glorotNormal" | Normalne | sqrt (2 / (fanIn+fanOut)) |
"glorotUniform" | Jednolite | sqrt (6 / (fanIn+fanOut)) |
"xavier" | Jednolite | sqrt (3 / fanIn) |
"jednolity" | Jednolite | 1/20 |
"gaussian" | Normalne | sqrt (0,04 / fanIn) |
"zero" | n/d | 0 |
(Gdzie zero
jest czasami wygodną alternatywą do określenia initValue=0
.) W przypadku równomiernego rozkładu parametry zostaną zainicjowane jednolicie w zakresie [-range, range]; w przypadku rozkładu normalnego średnia jest zawsze równa zero.
Należy pamiętać, że wartość domyślna dla init
elementu jest uniform
używana ParameterTensor{}
bezpośrednio.
Jednak wartością domyślną są glorotUniform
warstwy , które zawierają parametry wewnątrz, takie jak DenseLayer{}
i ConvolutionalLayer{}
.
Fan-in i fan-out na potrzeby inicjowania losowego
Inicjowanie losowe zakłada, że parametry są częścią jakiejś formy operacji podobnej do produktu macierzy, która ma dobrze zdefiniowany wentylator i fan-out, które są używane do określania skalowania wartości losowych na powyższą tabelę. Domyślnie pierwsza oś jest uważana za wydychaną, a pozostałe osie/osie są wentylatorami, pasującymi semantykami produktu macierzy regularnej.
Opcjonalny parametr initOutputRank
może służyć do określania liczby osi wiodących, które powinny być traktowane jako fan-out. Na przykład w przypadku produktu macierzy w rozszerzonej interpretacji tensora CNTK mapowania [K]
-wymiarowego wektora x
na [I x J]
obiekt -wymiarowy ranga-2 można zapisać jako Times
(W, x, outputRank=2)
, gdzie W
ma kształt [I x J x K]
.
W tym miejscu określa, initOutputRank=2
że podczas skalowania losowych wartości inicjowania wentylator jest I*J
i wentylator w .K
Wartości ujemne wskazują initOutputRank
, że osie wentylatora są osiami końcowymi. Na przykład jądro filtru ConvolutionalLayer{}
obiektu i operację bazową Convolution()
dla typowej konfiguracji przetwarzania obrazów ma kształt , gdzie K
jest wentylatorem, a wentylator ma W*H*C
wartość [W x H x C x K]
.
Jest to określone przez .initOutputRank=-1
Odczytywanie wartości początkowych z plików
Wartości początkowe można odczytać z pliku tekstowego. W tym celu przekaż nazwę ścieżki dla opcjonalnego parametru initFromFilePath
.
Oczekuje się, że plik tekstowy składa się z jednego wiersza na wiersz macierzy, który składa się z liczb rozdzielanych spacjami, po jednym na kolumnę.
Wymiary wiersza i kolumny w pliku muszą być zgodne z shape
.
Częstotliwość uczenia specyficznego dla parametrów
Współczynniki uczenia specyficzne dla parametrów można zrealizować za pomocą parametru opcjonalnego learningRateMultiplier
.
Ten czynnik jest mnożony przy użyciu rzeczywistego współczynnika uczenia podczas wykonywania aktualizacji parametrów.
Na przykład jeśli określono wartość 0, parametr nie zostanie zaktualizowany, jest stały.
Przykłady
Zwykła macierz parametrów, która zostanie zainicjowana jako heUniform
(wartość domyślna to heNormal
):
W = ParameterTensor {(outDim:inDim), init=`heUniform`}
Zwykły parametr stronniczy, który zostanie zainicjowany jako zero:
b = ParameterTensor {outDim, initValue=0}
Macierz osadzania, która powinna być odczytywana z pliku i zachowywana stała:
E = ParameterTensor {(embedDim:vocabSize),
initFromFilePath='./EmbeddingMatrix.txt',
learningRateMultiplier=0} # prevents learning
Parametr stronniczości pełnego rozmiaru [width x height]
obrazu -size z numChannels
płaszczyznami kolorów:
bFull = ParameterTensor {(width:height:numChannels)}
Stała{}
Utwórz stały tensor.
Constant {scalarValue, rows=1, cols=1}
Parametry
scalarValue
: wartość tej stałejrows
(wartość domyślna: 1): liczba wierszy, jeśli stała nie jest skalarnącols
(wartość domyślna: 1): liczba kolumn, jeśli stała nie jest skalarną
Wartość zwracana
Stała, skalarna lub rank-1 lub rank-2 obiektu wymiaru [rows x cols]
, gdzie wszystkie elementy są wypełnione .scalarValue
Opis
Wartość stała. Może to być skalarna lub obiekt rangi-1 (wektor) lub obiekt rangi-2 (macierz) zainicjowany z pojedynczą wartością (taką jak 0). Należy pamiętać, że ponieważ w przypadku stałych wektorowych i macierzowych wszystkie wartości są identyczne, stałe używane w połączeniu z operacjami mądrymi elementami często mogą być określane jako skalarne, przy jednoczesnym wykorzystaniu emisji.
Uwaga dotycząca implementacji:
A Constant()
jest elementem z elementem ParameterTensor{}
learningRateMultiplier=0
.
Przykłady
Interpolacja między dwiema wartościami o wadze alpha
interpolacji w zakresie 0,.1 ("soft multiplexer"):
SoftMUX (x, y, alpha) = Constant (1-alpha) .* x + Constant (alpha) .* y
Utrata hammingu (por. tutaj):
HammingLoss (y, p) = ReduceSum (BS.Boolean.Xor (y, Greater (p, Constant(0.5))))
hl = HammingLoss (multiLabels, probabilities)