Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Implementiert den optimierten CuDNN5 RNN-Stapel eines oder mehrerer wiederkehrender Netzwerkebenen.
OptimizedRNNStack (weights, input,
hiddenDims, numLayers = 1,
bidirectional = false,
recurrentOp='lstm')
Parameter
weights: eine Gewichtsmatrix, die alle Modellparameter als einzelne Matrix enthält. Verwenden Sie die Dimensioninference, cf. Beschreibung unten.input: Daten zum Anwenden des Stapels eines oder mehrerer wiederkehrender Netzwerke auf. Muss eine Sequenz sein und darf nicht versparen.hiddenDims: Dimension des ausgeblendeten Zustands in jeder Ebene und, wenn bidirektional, jeder der beiden RichtungennumLayers(Standard: 1): Anzahl der Ebenenbidirectional(standard: false): if true, the model is bidirectionalrecurrentOp(Standard:lstm): Wählen Sie den RNN-Typ aus. Zulässige Werte:lstm, ,gru,rnnTanhrnnReLU
BESCHREIBUNG
Diese Funktion bietet Zugriff auf das CuDNN5 RNN, eine hoch effiziente Implementierung eines Stapels eines oder mehrerer Ebenen wiederkehrender Netzwerke. Wir haben Geschwindigkeiten in der Reihenfolge von 5 beobachtet, verglichen mit einer expliziten Implementierung als Berechnungsnetzwerk in BrainScript. Obwohl es nicht so flexibel wie eine BrainScript-Implementierung ist, kann die Geschwindigkeit der Schulungszeit den Kompromiss wert sein (beachten Sie jedoch, dass solche Modelle nur auf Computern mit einer GPU bereitgestellt werden können).
Die Netzwerke können uni- oder bidirektional sein und von der folgenden Art (recurrentOp Parameter):
lstm: Long Short Term Memory (Hochreiter und Schmidhuber)gru: Wiederkehrende Einheit mit GitternrnnTanh: nur RNN mit einertanhNicht-LinearitätrnnReLU: einfache RNN mit einer rektifizierten linearen Nicht-Linearität
Alle Gewichtungen sind in einer einzelnen Matrix enthalten, die Zeilen und so viele Spalten wie erforderlich enthalten sollte hiddenDims , um alle Parameter zu halten.
Da dies schwerfällig sein kann, um zu bestimmen, können Sie die Dimension automatisch verzögert haben.
Um sicherzustellen, dass die zufällige Initialisierung den richtigen Fan-In verwendet, geben Sie folgendes an initOutputRank=-1:
W = ParameterTensor {(Inferred:Inferred), initOutputRank=-1}
Wenn Sie den lstm Vorgang verwenden, empfehlen wir, diesen Grundtyp durch RecurrentLSTMLayerStack{}zu verwenden, der die Gewichte erstellt.
Schulung auf GPU, Bereitstellen auf CPU
Derzeit ist es nicht möglich, eine RNN-Schulung als OptimizedRNNStack() System ohne GPUs bereitzustellen.
Wir glauben, dass es möglich ist, eine Nachschulungsmodellbearbeitungsaktion durchzuführen, die die Knoten durch CPU-kompatible native BrainScript-Ausdrücke ersetzt, die genau die OptimizedRNNStack() CuDN5 RNN5-Implementierung emulieren.
Beispiel
Spracherkennungsmodell, das aus einer 3-ausgeblendeten Ebene besteht, eine bidirektionale LSTM mit einer ausgeblendeten Zustandsdimension pro Ebene und Richtung von 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}