Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Implementuje optimalizovaný zásobník cuDNN5 RNN jedné nebo více opakujících se síťových vrstev.
OptimizedRNNStack (weights, input,
hiddenDims, numLayers = 1,
bidirectional = false,
recurrentOp='lstm')
Parametry
weights: jedna matice hmotnosti obsahující všechny parametry modelu jako jednu matici. Použijte odvození dimenzí, viz popis níže.input: data pro použití zásobníku jedné nebo více opakujících se sítí. Musí být posloupnost a nesmí být řídké.hiddenDims: dimenze skrytého stavu v každé vrstvě a v případě obousměrného směrování každého ze dvou směrůnumLayers(výchozí: 1): počet vrstevbidirectional(výchozí hodnota: false): Pokud je pravda, model je obousměrný.recurrentOp(výchozí:lstm): Vyberte typ sítě RNN. Povolené hodnoty:lstm, ,gru,rnnTanhrnnReLU
Description
Tato funkce poskytuje přístup k síti CuDNN5 RNN, vysoce efektivní implementaci zásobníku jedné nebo více vrstev opakujících se sítí. Zaznamenali jsme rychlost v pořadí 5 v porovnání s explicitní implementací jako výpočetní síť v BrainScriptu. I když není tak flexibilní jako implementace BrainScriptu, může být rychlejší trénování za kompromis (upozorňujeme však, že takové modely je možné nasadit pouze na počítače s GPU).
Sítě mohou být jednosměrné nebo obousměrné a mohou mít následující druh (recurrentOp parametr):
lstm: Dlouhodobá krátkodobá paměť (Hochreiter a Schmidhuber)gru: Vrátná rekurentní jednotkarnnTanh: plain RNN with atanhnon-linearityrnnReLU: plain RNN with a rectified linearity non-linearity
Všechny váhy jsou obsaženy v jedné matici, která by měla obsahovat hiddenDims řádky a tolik sloupců, kolik je potřeba k uložení všech parametrů.
Vzhledem k tomu, že to může být těžkopádné k určení, můžete mít dimenzi odvozenou automaticky.
Chcete-li zajistit, aby náhodná inicializace používala správný ventilátor, zadejte initOutputRank=-1:
W = ParameterTensor {(Inferred:Inferred), initOutputRank=-1}
Pokud použijete lstm operaci, doporučujeme tuto primitivu použít prostřednictvím RecurrentLSTMLayerStack{}, což se postará o vytvoření váhy.
Trénování na GPU, nasazení na procesor
V současné době není možné nasadit síť RNN natrénovanou jako na OptimizedRNNStack() systémech bez gpu.
Věříme, že je možné provést akci úprav modelu po trénování, která nahrazuje OptimizedRNNStack() uzly nativními výrazy BrainScriptu kompatibilními s procesorem, které přesně emulují implementaci RNN5 CuDNN5.
Příklad
Model rozpoznávání řeči, který se skládá ze 3 skryté vrstvy obousměrného LSTM s dimenzí skrytého stavu na vrstvu a směr 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}