質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • Python

    8612questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • TensorFlow

    710questions

tensorflowのdynamic_rnnの使い方について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 413

mizuwater

score 2

以下のように、dynamic_rnn()を用いて、LSTM1層を組み込んだニューラルネットの学習を行っていたのですが、これをLSTM2層、3層と増やすにはどのように書き換えればいいのでしょうか?

    import tensorflow as tf

    X = tf.placeholder(tf.float32, [None,time_steps,input_row], name='X') # Input data

    lstm_1 = tf.nn.rnn_cell.BasicLSTMCell(15)#
    lstm_out_1,states_op = tf.nn.dynamic_rnn(lstm_1,X,dtype=tf.float32,time_major=False)#
    lstm_out_1_last = lstm_out_2[:,-1,:]

    f = tf.cond(train, lambda: tf.slice(lstm_out_1_last, [0, 0], [batch_size // 2, -1]), lambda: lstm_out_1_last)
    y = tf.cond(train, lambda: tf.slice(Y, [0, 0], [batch_size // 2, -1]), lambda: Y)

    W1 = weight_variable([15, 2])
    b1 = bias_variable([2])
    p_logit = tf.matmul(f, W1) + b1
    p = tf.nn.softmax(p_logit)
    p_loss = tf.nn.softmax_cross_entropy_with_logits(logits=p_logit, labels=y)

dynamic_rnn()とrnn_cell.BasicLSTMCell()を増やして、以下のようなコードに書き換えてみたのですが、エラーが出て動きませんでした。。

    import tensorflow as tf
    X = tf.placeholder(tf.float32, [None,time_steps,input_row], name='X') # Input data

    lstm_1 = tf.nn.rnn_cell.BasicLSTMCell(15)#
    lstm_2 = tf.nn.rnn_cell.BasicLSTMCell(15)#

    lstm_out_1,states_op = tf.nn.dynamic_rnn(lstm_1,X,dtype=tf.float32,time_major=False)#
    lstm_out_2,states_op = tf.nn.dynamic_rnn(lstm_2,lstm_out_1,dtype=tf.float32,time_major=False)#
    lstm_out_1_last = lstm_out_2[:,-1,:]

    f = tf.cond(train, lambda: tf.slice(lstm_out_1_last, [0, 0], [batch_size // 2, -1]), lambda: lstm_out_1_last)
    y = tf.cond(train, lambda: tf.slice(Y, [0, 0], [batch_size // 2, -1]), lambda: Y)

    W1 = weight_variable([15, 2])
    b1 = bias_variable([2])
    p_logit = tf.matmul(f, W1) + b1
    p = tf.nn.softmax(p_logit)
    p_loss = tf.nn.softmax_cross_entropy_with_logits(logits=p_logit, labels=y)

 エラー内容

File "main.py", line 178, in <module>
build_model()
File "main.py", line 129, in build_model
lstm_out_2,states_op = tf.nn.dynamic_rnn(lstm_2,lstm_out_1,dtype=tf.float32,time_major=False)#
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/rnn.py", line 627, in dynamic_rnn
dtype=dtype)
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/rnn.py", line 824, in _dynamic_rnn_loop
swap_memory=swap_memory)
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/control_flow_ops.py", line 3224, in while_loop
result = loop_context.BuildLoop(cond, body, loop_vars, shape_invariants)
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/control_flow_ops.py", line 2956, in BuildLoop
pred, body, original_loop_vars, loop_vars, shape_invariants)
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/control_flow_ops.py", line 2893, in _BuildLoop
body_result = body(*packed_vars_for_body)
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/control_flow_ops.py", line 3194, in <lambda>
body = lambda i, lv: (i + 1, orig_body(*lv))
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/rnn.py", line 795, in _time_step
(output, new_state) = call_cell()
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/rnn.py", line 781, in <lambda>
call_cell = lambda: cell(input_t, state)
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/rnn_cell_impl.py", line 339, in call
*args, **kwargs)
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/layers/base.py", line 699, in call
self.build(input_shapes)
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/rnn_cell_impl.py", line 588, in build
shape=[input_depth + h_depth, 4 * self._num_units])
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/layers/base.py", line 546, in add_variable
partitioner=partitioner)
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/training/checkpointable.py", line 436, in _add_variable_with_custom_getter
**kwargs_for_getter)
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/variable_scope.py", line 1317, in get_variable
constraint=constraint)
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/variable_scope.py", line 1079, in get_variable
constraint=constraint)
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/variable_scope.py", line 425, in get_variable
constraint=constraint)
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/variable_scope.py", line 394, in _true_getter
use_resource=use_resource, constraint=constraint)
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/variable_scope.py", line 733, in _get_single_variable
name, "".join(traceback.format_list(tb))))
ValueError: Variable rnn/basic_lstm_cell/kernel already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope? Originally defined at:

File "main.py", line 128, in build_model
lstm_out_1,states_op = tf.nn.dynamic_rnn(lstm_1,X,dtype=tf.float32,time_major=False)#
File "main.py", line 178, in <module>
build_model()

ご存知の方、教えていただけると助かります。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mkgrei

    2018/05/06 21:42

    どのようなエラーが出たのか、内容をそのまま記述するのが一般的です。

    キャンセル

回答 1

checkベストアンサー

+1

実行可能な最小のコードではないので、検証することはできませんが、
質問のコードで生じるエラーをなくすにはBasicLSTMCellに名前をつければうまくいきます。

lstm_1 = tf.nn.rnn_cell.BasicLSTMCell(15, name='blstmc1')#
lstm_2 = tf.nn.rnn_cell.BasicLSTMCell(15, name='blstmc2')#

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/08 00:25

    ありがとうございます!無事動きました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python

    8612questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • TensorFlow

    710questions