Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Implementuje zoptymalizowany stos CuDNN5 RNN co najmniej jednej cyklicznej warstwy sieciowej.
OptimizedRNNStack (weights, input,
hiddenDims, numLayers = 1,
bidirectional = false,
recurrentOp='lstm')
Parametry
weights: jedna macierz wagi zawierająca wszystkie parametry modelu jako pojedynczą macierz. Użyj wnioskowania wymiarów, por. opis poniżej.input: dane, do których ma być stosowany stos co najmniej jednej cyklicznej sieci. Musi być sekwencją i nie może być rozrzedzy.hiddenDims: wymiar ukrytego stanu w każdej warstwie i, jeśli dwukierunkowy, każdego z dwóch kierunkównumLayers(ustawienie domyślne: 1): liczba warstwbidirectional(wartość domyślna: false): jeśli wartość true, model jest dwukierunkowyrecurrentOp(ustawienie domyślne:lstm): wybierz typ nazwy sieci RNN. Dozwolone wartości:lstm, ,rnnTanhgru,rnnReLU
Opis
Ta funkcja zapewnia dostęp do sieci RNN CuDNN5, wysoce wydajnej implementacji stosu co najmniej jednej warstwy sieci cyklicznych. Zaobserwowaliśmy przyspieszenie w kolejności 5 w porównaniu z jawną implementacją jako siecią obliczeniową w języku BrainScript. Chociaż nie jest to tak elastyczne, jak implementacja brainScript, przyspieszenie czasu trenowania może być warte naruszenia (należy jednak pamiętać, że takie modele można wdrażać tylko na maszynach z procesorem GPU).
Sieci mogą być jednokierunkowe lub dwukierunkowe i mieć następujący rodzaj (recurrentOp parametr):
lstm: Pamięć krótkoterminowa (Hochreiter i Schmidhuber)gru: Jednostka rekursyjna z bramąrnnTanh: zwykła nazwa sieci RNN z nieliniowościątanhrnnReLU: zwykła nazwa sieci RNN z prostą nieliniowością liniową
Wszystkie wagi są zawarte w pojedynczej macierzy, która powinna zawierać hiddenDims wiersze i tyle kolumn, ile jest potrzebnych do przechowywania wszystkich parametrów.
Ponieważ może to być kłopotliwe do określenia, można automatycznie wywnioskować wymiar.
Aby upewnić się, że inicjowanie losowe używa poprawnego wentylatora, określ :initOutputRank=-1
W = ParameterTensor {(Inferred:Inferred), initOutputRank=-1}
Jeśli używasz lstm operacji , zalecamy użycie tego elementu pierwotnego za pomocą RecurrentLSTMLayerStack{}elementu , który zajmie się tworzeniem wag.
Trenowanie na procesorze GPU, wdrażanie na procesorze CPU
Obecnie nie można wdrożyć sieci RNN wytrenowanego jako modułu OptimizedRNNStack() w systemach bez procesorów GPU.
Uważamy, że istnieje możliwość wykonania akcji edytowania modelu po trenowaniu, która zastępuje OptimizedRNNStack() węzły za pomocą natywnych wyrażeń BrainScript zgodnych z procesorem CPU, które dokładnie emulują implementację sieci RNN5 CuDNN5.
Przykład
Model rozpoznawania mowy składający się z 3-ukrytej warstwy dwukierunkowej LSTM z wymiarem ukrytego stanu na warstwę i kierunek 512:
features = Input {40}
W = ParameterTensor {(Inferred:Inferred), initOutputRank=-1, initValueScale=1/10}
h = OptimizedRNNStack (W, features, 512, numLayers=3, bidirectional=true)
p = DenseLayer {9000, activation=Softmax, init='heUniform', initValueScale=1/3}