LSTM のC++推論実行

595 views
Skip to first unread message

anyuy...@gmail.com

unread,
Mar 23, 2018, 11:58:44 PM3/23/18
to Neural Network Console Users (JP)
初めて質問させて頂きます。どこかに情報が掲載されているようでしたら申し訳ありません。

公式サイトに↓の記載がありますが、最新バージョンで変化はありますでしょうか?
 C++のみで推論:Pythonを用いずに実行
 *1 バージョン0.9.4においては推論できるネットワークには制限があり、RepeatStart, RepeatEnd, ReccurentInput, RecurrentOutput, Delay, LSTMを用いたネットワークについては推論を実施できません。

C++ アプリケーションから、学習済みの LSTM の推論を実行したいため、方法を模索中です。
何か参考になりそうな方法をご存じでしたら教えて頂けると幸いです。

宜しくお願いします。

小林由幸

unread,
Mar 26, 2018, 12:45:54 AM3/26/18
to Neural Network Console Users (JP)
残念ながら現状でもRNNについてそのままの形で推論実行することはできません。
しかしながら学習済みのRNNを編集し、1時刻分のデータを処理するネットワークを作成することで
C++から推論を実行できるようになります。

具体的な方法は以下の資料が参考になるかと思います。
https://www.slideshare.net/Sony_Neural_Network_Console_Libraries/20180227recurrentneuralnetworks
p19-p21


RNNで推論を実行する場合、1時刻分のネットワークだけを利用するように実装したほうが無駄がなく効率的ですので、
仮に将来RNN全体をC++から推論が実行できるようになったとしても上記の方法が推奨の実装方法となります。

anyuy...@gmail.com

unread,
Mar 26, 2018, 6:13:10 PM3/26/18
to Neural Network Console Users (JP)
早速のご回答ありがとうございます。
また、わかりやすい資料をご紹介頂きましてとても参考になります。

NeuralNetworkConsoleにて、LSTM Layer を使って学習しているのですが、
ご紹介頂いたように、学習済みの LSTM を RNN に分解したり、中身を編集することは可能なのでしょうか?

お手数をお掛けしますがご教示頂けると幸いです。

小林由幸

unread,
Apr 2, 2018, 9:09:32 PM4/2/18
to Neural Network Console Users (JP)
残念ながら学習済みのLSTMの分解はできません。

LSTMレイヤーは簡単にLSTMの実験を試すには良いのですが、柔軟性を考えると
LSTM auto encoderサンプルのような分解された状態で利用するのがBetterです。

お手数ですがLSTMが分解されたネットワーク構造での再学習をお薦めします。

anyuy...@gmail.com

unread,
Apr 18, 2018, 8:10:33 PM4/18/18
to Neural Network Console Users (JP)
返信が遅くなりましたが、ご回答ありがとうございました。

LSTMが分解されたネットワークでは、構造自動探索機能が使えない(途中でエラーで止まってしまう)ようなので、LSTM Layer を使って学習ができるとよいと考えていました。

いまは、LSTM Layer で学習のあたりを付けたうえで、LSTM が分解されたネットワーク再学習しようとしているのですが、
LSTM Layer と同じ LSTM SampleProject は完全に同じなのでしょうか?
Statistics の数値が同じにならないのが、自分のミスなのかどうかを気にしています。

引き続きトライしてみます

小林由幸

unread,
Apr 19, 2018, 8:12:42 AM4/19/18
to Neural Network Console Users (JP)
LSTM sample projectのネットワーク構成に対し、LSTMレイヤー使用時と同じセルサイズを設定することで、
同じ結果になることが期待できます。

ただし、乱数を用いた係数の初期化を行う都合上、試行の度に結果に差分が生じます。
何度が学習を実行し、ほぼ同じ範囲の誤差に収まるようであれば同じネットワークであると判断できるかと思います。

Reply all
Reply to author
Forward
0 new messages