Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Implementeert de geoptimaliseerde CuDNN5 RNN-stack van een of meer terugkerende netwerklagen.
OptimizedRNNStack (weights, input,
hiddenDims, numLayers = 1,
bidirectional = false,
recurrentOp='lstm')
Parameters
weights: één gewichtsmatrix met alle modelparameters als één matrix. Gebruik dimensiedeductie, zie de onderstaande beschrijving.input: gegevens waarop de stapel van een of meer terugkerende netwerken moet worden toegepast. Moet een reeks zijn en mag niet parseren.hiddenDims: dimensie van de verborgen status in elke laag en, indien bidirectioneel, van elk van de twee richtingennumLayers(standaard: 1): aantal lagenbidirectional(standaard: onwaar): indien waar, is het model bidirectioneelrecurrentOp(standaard:lstm): selecteer het RNN-type. Toegestane waarden:lstm,gru,rnnTanhrnnReLU
Description
Deze functie geeft toegang tot de CuDNN5 RNN, een zeer efficiënte implementatie van een stapel van een of meer lagen terugkerende netwerken. We hebben versnellingen waargenomen in de volgorde van 5, vergeleken met een expliciete implementatie als rekennetwerk in BrainScript. Hoewel het niet zo flexibel is als een BrainScript-implementatie, kan de snelheid van de trainingstijd het compromis waard zijn (houd er echter rekening mee dat dergelijke modellen alleen kunnen worden geïmplementeerd op machines met een GPU).
De netwerken kunnen uni- of bidirectioneel zijn en van het volgende type (recurrentOp parameter):
lstm: Long Short Term Memory (Hochreiter en Schmidhuber)gru: Gated Terugkerende EenheidrnnTanh: gewone RNN met eentanhniet-lineariteitrnnReLU: gewone RNN met een gecorrigeerde lineaire niet-lineariteit
Alle gewichten zijn opgenomen in één matrix met hiddenDims rijen en zoveel kolommen als nodig is om alle parameters te bewaren.
Omdat dit lastig kan zijn om te bepalen, kunt u de dimensie automatisch laten afleiden .
Als u wilt controleren of voor willekeurige initialisatie de juiste ventilator wordt gebruikt, geeft u initOutputRank=-1het volgende op:
W = ParameterTensor {(Inferred:Inferred), initOutputRank=-1}
Als u de lstm bewerking gebruikt, raden we u aan om deze primitieve via RecurrentLSTMLayerStack{}te gebruiken, die zorgt voor het maken van de gewichten.
Training op GPU, implementeren op CPU
Momenteel is het niet mogelijk om een RNN te implementeren die is getraind als een OptimizedRNNStack() op systemen zonder GPU's.
We denken dat het mogelijk is om een natrainingsmodelbewerkingsactie uit te voeren die de OptimizedRNNStack() knooppunten vervangt door CPU-compatibele systeemeigen BrainScript-expressies die de CuDNN5 RNN-implementatie nauwkeurig nabootsen.
Voorbeeld
Spraakherkenningsmodel dat bestaat uit een drie verborgen laag en een bidirectionele LSTM met een verborgen statusdimensie per laag en richting van 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}