2016-04-17 9 views
2

私はテンソルの流れでリカレントニューラルネットワークを作成しようとしています。ネットワークへの入力は一連のベクトルです。シーケンスの長さは、すべての入力で異なります。私は入力のバッチでこれをやりたい可変シーケンス長のテンソルフローでリカレントニューラルネットワークを作成するにはどうすればいいですか?

どのようにこれを行うには正確に私を助けることができますか?私はテンソルフローサイトのチュートリアルを終えましたが、まだ私には分かりません。

+0

このhttps://github.com/tensorflow/tensorflow/tree/master/tensorflow/models/rnnモデルは(この場合はranslationのために)何をしたい – Ashish

+0

こんにちはアシシュをし、私はそのコードを通過しようとしましたこの質問をする前にしかし、私は正確にどのようにそれをやっているのか理解できませんでしたか?あなたはコード内の正しい場所を指していますか?ありがとう – akshaybetala

答えて

1

あなたはRNN機能は、それが取る引数のhere

つを定義して使用することができますsequence_length

sequence_lengthです:入力中に各シーケンスの長さを指定します。 int32またはint64ベクトル(テンソル)サイズ[batch_size]。値は[0、T]です。

  1. 入力形状である[sequence_length、BATCH_SIZE、input_size]及びません:ここでは

は、この方法は、理由のカップルのための私には少し混乱した

# x, state, sequence_length are placeholders 
outputs, final_state = tf.nn.rnn(lstm_cell, x, state, sequence_length = sequence_lengths) 
# add softmax layer, define loss, training method, etc 
... 

# code for one epoch 
iterations = total_data_length/batch_size 
max_sequence_length = max(all_possible_sequence_lengths) 
cur_state = initial_state 

for i in range(iterations): 
    # x is of dimension [max_sequence_length, batch_size, input_size] 
    # sequence_lengths is of dimension [batch_size] 
    x_data, sequence_data, y_data = mini_batch(batch_size) 

    feed_dict = {k: v for k, v in zip(x, x_data)} 
    feed_dict.append(sequence_lengths: sequence_data, ...) 
    outs, cur_state, _ = session.run([outputs, final_state, train], feed_dict) 

完全なループを実装する方法であります[batch_size、sequence_length、input_size]。しかし、コード全体を見て、rnn()がどのように実装されているかを見れば、これは完全に理にかなっています。これはまた、matmulに渡すためにアウトプット(入力と同じ次元を持つ)を作り直す必要があることを意味します。例えば、softmaxなどです。

  • 関数rnn()のパラメータ入力は、Pythonリストです。 feed_dictでこれを{x:x_data}として渡すことはできません。「ハッシュ・タイプにできません: 'リスト'」というエラーが表示されます。代わりに私が上のコードでどのように理解を使用したかを見てください。
  • 0

    それはあなたのデータセットに依存しますが、あなたが行うことができます:

    1. 合理的なサイズ(例えば、256)を使用し、あなたのデータセットの最大長を使用するか、または
    2. とまで入力データを分割サイズよりも長い場合はサイズ。
    関連する問題