3

https://github.com/cazala/synapticパッケージの使用

次の構成で Architect 経由で LSTM モジュールを試しました。

var LSTM = new synaptic.Architect.LSTM(100, 100, 20);

次に、私のアルゴリズムは約450〜500回の反復を行い、各反復でネットワークをアクティブにしてから正しい出力値を伝播します。

var output = LSTM.activate(HistoricalFrame);
//some code
LSTM.propagate(0.5, PredictionFrame);

400 ~ 500 回の繰り返しの後、突然停止し、約 14GB のメモリを消費し始めます。この単一のステップの前に、約 1GB を使用します。

原因がトレースなのか最適化なのかはわかりませんが、ネットワークが使用できなくなります。

残りのコードでメモリ リークをテストしたところ、問題の原因は activate 関数であることがわかりました。

これは、この問題を示すサンプル コードです。Intel Core i5 と 8GB RAM を搭載した私の MacBook Pro では、ステップ 512 で停止し、最大 14GB のメモリを消費し始めます。

var synaptic = require("synaptic");

//Define frames
var HistoricalFrame = [];
var PredictionFrame = [];

var HistoricalFrameSize = 100;
var PredictionFrameSize = 20;

var FrameCount = 25000;

//Create LSTM
console.log("Initializing LSTM...");
var LSTM = new synaptic.Architect.LSTM(HistoricalFrameSize, HistoricalFrameSize, PredictionFrameSize);

console.log("Optimizing LSTM...");
LSTM.optimize();

console.log("Starting prediction...");

//Make predictions
for(var FrameIndex = 0; FrameIndex < FrameCount; FrameIndex++){

    console.log(FrameIndex);

    //Add value to frame(s)
    PredictionFrame.push(Math.random());

    //Move first value from prediction frame to historical frame
    if(PredictionFrame.length > PredictionFrameSize){
        HistoricalFrame.push( PredictionFrame.shift() );
    }

    //Throw away first value from historical frame to keep the max size
    if(HistoricalFrame.length > HistoricalFrameSize)
        HistoricalFrame.shift();

    //Activate LSTM when frames are filled
    if(HistoricalFrame.length == HistoricalFrameSize){

        var output = LSTM.activate(HistoricalFrame);
        LSTM.propagate(0.5, PredictionFrame);

    }

}

問題が発生する可能性のあるアイデアはありますか?

これも問題として投稿しましたhttps://github.com/cazala/synaptic/issues/56

本当に高速な Python PyBrain ライブラリを試しましたが、ニューラル ネットワークと LSTM の実装が異なります。最良の結果が得られるため、次の論文による正確な実装が必要です。

http://www.overcomplete.net/papers/nn2012.pdf

4

0 に答える 0