1

私はシーケンス分類のためのLSTMニューラルネットワークの実装に取り​​組んでいます。私は、次のパラメータを使用してネットワークを設計したい:CNTKでシーケンス分類LSTMネットワークを実装する方法は?

  1. 入力:nワンホット・ベクトルのシーケンス。
  2. ネットワークトポロジ: 2層LSTMネットワーク。
  3. 出力:与えられたシーケンスがクラスに属する確率(バイナリ分類)。私は第2のLSTM層からの最後の出力のみを考慮したい。

これをCNTKで実装する必要がありますが、ドキュメントが実際にはうまく書かれていないため、苦労しています。誰かが私を助けることができますか?

答えて

6

あなたが探しているまさに次のsequence classification exampleがあります。

唯一の違いは、LSTMレイヤを1つだけ使用することです。あなたは簡単に変更することで、複数の層を使用するには、このネットワークを変更することができます。

LSTM_function = LSTMP_component_with_self_stabilization(
    embedding_function.output, LSTM_dim, cell_dim)[0] 

へ:

num_layers = 2 # for example 
encoder_output = embedding_function.output 
for i in range(0, num_layers): 
    encoder_output = LSTMP_component_with_self_stabilization(encoder_output.output, LSTM_dim, cell_dim) 

しかし、あなたがより良い新しいレイヤーのライブラリを使用して提供することでしょう。そして、あなたは、単にこれを行うことができます:

encoder_output = Stabilizer()(input_sequence) 
for i in range(0, num_layers): 
    encoder_output = Recurrence(LSTM(hidden_dim)) (encoder_output.output) 

を次に、あなたが密な出力層に入れたいあなたの最終的な出力を得るために、あなたが最初に行うことができます:

final_output = sequence.last(encoder_output) 

、その後

z = Dense(vocab_dim) (final_output) 
1

私はCNTKに精通していません。しかし、この質問は長い間答えられずに残っているので、私はおそらくあなたの実装を助けるためのアドバイスを提案することができますか? これらのアーキテクチャにどれくらいの経験を積んでいるのかよくわかりません。 CNTKに移動する前に(他の一般的なリポジトリ(Theano、テンソルフローなど)を参照することをお勧めします)

たとえば、ここではtheanoの同様のタスクを示します:kyunghyuncho tutorials。定義のために "def lstm_layer"を探してください。 トーチ例ホープ、これはビットを助けKarpathy's very popular tutorials

で見つけることができます。..

2

hereあなたは、簡単な方法を見つけるだけのような追加の層を追加することができます。

Sequential([ 
     Recurrence(LSTM(hidden_dim), go_backwards=False), 
     Recurrence(LSTM(hidden_dim), go_backwards=False), 
     Dense(label_dim, activation=sigmoid) 
    ]) 

トレーニングし、テストして適用する...

2

CNTKは、エンドツーエンドを持っている言語理解のためのhands-on tutorialを公表レシピ:

このハンズオンラボスロットのAir Travel Information Services(ATIS)タスクのテキストを処理するためのリカレントネットワークを実装する方法を示していますタグ付け(個々の単語をそれぞれのクラスにタグ付けします。クラスはトレーニングデータセットのラベルとして提供されます)。私たちは、単語の直後に繰り返しLSTMを埋め込むことから始めます。これは、隣接ワードを含むように拡張され、双方向に実行されます。最後に、このシステムをインテント分類子に変換します。

関連する問題