Udostępnij za pośrednictwem


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 inicjowania
  • randomSeed (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 nich ParameterTensor{}
  • 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 to init="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 elementami M ;
  • (1:N) dla wektora wiersza z elementami N . Wektory wierszy to macierze jednorzędowe;
  • (M:N)dla macierzy z wierszami i I 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łami C .

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ą glorotUniformwarstwy , 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*Cwartość [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łej
  • rows (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)