8

私は既に訓練されたTensorFlowの基本的なLSTMと、ブラウザで実行できるjavascriptのバージョンとの間のインターフェイスを実装しようとしています。問題は、すべての文献で、LSTMが(接続、ノード、ゲートのみを使用して)ミニネットワークとしてモデル化されており、TensorFlowの方がはるかに進んでいるようです。TensorFlow LSTMをsynapticjsに翻訳する

私がしているしている二つの質問:

  1. がTen​​sorFlowモデルを簡単に、より従来のニューラルネットワーク構造に変換することができますか?

  2. TensorFlowがこの構造体に与える訓練可能な変数をマップする実際的な方法はありますか?

私は、問題は、彼らが唯一の私が見てきたモデルのほとんどがためのいくつかのバイアスが含まれるであろうLSTMノードあたりのバイアスのための1つの値を、持っているように見えるということです、TensorFlowのうち、「トレーニング可能な変数」を得ることができますメモリセル、入力および出力を含む。

答えて

8

内部、LSTMCellクラスではなく、効率の目的のために8つの小さいものの一つの大きなマトリックスとしてLSTM重みを格納します。より一般的な表現になるには、それを水平方向と垂直方向に分けるのは簡単です。ただし、ライブラリが同様の最適化を行う場合は、より簡単で効率的です。

ここBasicLSTMCellのコードの関連部分は、次のとおり

concat = linear([inputs, h], 4 * self._num_units, True) 

# i = input_gate, j = new_input, f = forget_gate, o = output_gate 
i, j, f, o = array_ops.split(1, 4, concat) 

linear機能は[batch_size, self._num_units]形状の4つのマトリックスに連結入力及び前h状態を変換するための行列乗算を行います。線形変換は、あなたがその質問で参照している単一の行列とバイアス変数を使用します。結果は、LSTM変換で使用される異なるゲートに分割されます。

各ゲートのトランスフォームを明示的に取得したい場合は、そのマトリックスとバイアスを4つのブロックに分割できます。 4線形変換または8線形変換を使用してゼロから実装することも非常に簡単です。