Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse 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}