Aracılığıyla paylaş


İyileştirilmiş RNN Yığını

Bir veya daha fazla yinelenen ağ katmanının iyileştirilmiş CuDNN5 RNN yığınını uygular.

OptimizedRNNStack (weights, input,
                   hiddenDims, numLayers = 1,
                   bidirectional = false,
                   recurrentOp='lstm')

Parametreler

  • weights: Tek bir matris olarak tüm model parametrelerini içeren bir ağırlık matrisi. Aşağıdaki boyut çıkarımı, cf. açıklamasını kullanın.
  • input: bir veya daha fazla yinelenen ağın yığınının uygulanacağı veriler. Bir dizi olmalı ve seyrek olmamalıdır.
  • hiddenDims: her katmandaki gizli durumun boyutu ve çift yönlüyse iki yönün her birinin boyutu
  • numLayers (varsayılan: 1): katman sayısı
  • bidirectional (varsayılan: false): True ise model çift yönlüdür
  • recurrentOp (varsayılan: lstm): RNN türünü seçin. İzin verilen değerler: lstm, gru, rnnTanh, rnnReLU

Description

Bu işlev, bir veya daha fazla yinelenen ağ katmanından oluşan bir yığının son derece verimli bir şekilde uygulanması olan CuDNN5 RNN'ye erişim sağlar. BrainScript'te bir hesaplama ağı olarak açık bir uygulamayla karşılaştırıldığında, 5 sırasına göre hız artışları gözlemledik. BrainScript uygulaması kadar esnek olmasa da, eğitim süresinin hızlandırılması tehlikeye değer olabilir (bununla birlikte, bu tür modellerin yalnızca GPU'ya sahip makinelere dağıtılabildiğini unutmayın).

Ağlar tek veya çift yönlü olabilir ve aşağıdaki türde (recurrentOp parametre) olabilir:

  • lstm: Uzun Kısa Süreli Bellek (Hochreiter ve Schmidhuber)
  • gru: Geçitli Yinelenen Birim
  • rnnTanh: doğrusal olmayan düz tanh RNN
  • rnnReLU: düzeltilmemiş doğrusal doğrusal olmayan düz RNN

Tüm ağırlıklar, satırlara ve tüm parametreleri tutmak için gereken sayıda sütuna sahip hiddenDims olması gereken tek bir matriste yer alır. Bunun belirlenmesi zahmetli olabileceğinden, boyutun otomatik olarak çıkarılabilmesini sağlayabilirsiniz. Rastgele başlatmanın doğru fan-in'i kullandığından emin olmak için belirtin initOutputRank=-1:

W = ParameterTensor {(Inferred:Inferred), initOutputRank=-1}

işlemini kullanırsanız lstm , bu temel öğeyi aracılığıyla RecurrentLSTMLayerStack{}kullanmanızı öneririz. Bu işlem, ağırlıkları oluşturmayı dikkate alır.

GPU eğitimi, CPU'da dağıtma

Şu anda GPU'ları olmayan sistemlerde eğitilmiş bir OptimizedRNNStack() RNN dağıtmak mümkün değildir. Düğümleri OptimizedRNNStack() CuDNN5 RNN uygulamasına tam olarak öykünen CPU uyumlu yerel BrainScript ifadeleriyle değiştiren bir eğitim sonrası model düzenleme eylemi gerçekleştirmenin mümkün olduğuna inanıyoruz.

Örnek

Katman başına gizli durum boyutuna ve 512 yönüne sahip iki yönlü LSTM olan 3 gizli katmandan oluşan konuşma tanıma modeli:

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}