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

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

新規登録して質問してみよう
ただいま回答率
85.49%
機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

解決済

1回答

3414閲覧

複数回RNNの学習をしようとするとグラフの更新の箇所でエラーが出ます

kkiryama

総合スコア12

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2018/09/28 05:02

編集2018/09/28 08:50

ハイパーパラメータを変えながらfor文を回してRNNを実行すすることで最適な値を探索したいです

PythonとTensorflowを使った機械学習とプログラミングの勉強を始めたばかりです。
インターネットの記事を参考にしながらRNNの実装を行いました。参考にした記事は
https://deepinsider.jp/tutor/introtensorflow/buildrnn
です。
さらに自分の勉強のためにノードの数やミニバッチのサイズなどを変えながらよりよい学習ができるパラメータを探そうと思いました。

発生している問題・エラーメッセージ

for文を使ってパラメータを変えながらRNNを複数回やってみたのですが、下のようなエラーメッセージが出てしまいました。

ValueError: Variable rnn/basic_rnn_cell/kernel already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope?

該当のソースコード

全部載せると長くなるのでforループの部分です。他の部分は上記の記事にすべて載っています。

Python

1for k in range(5): 2 # RNNセルの作成 3 cell = tf.nn.rnn_cell.BasicRNNCell((k+1)*20) 4 initial_state = cell.zero_state(tf.shape(x)[0], dtype=tf.float32) 5 outputs, last_state = tf.nn.dynamic_rnn(cell, x, initial_state=initial_state, dtype=tf.float32) 6 7 # 全結合 8 # 重み 9 w = tf.Variable(tf.zeros([(k+1)*20, FEATURE_COUNT])) 10 # バイアス 11 b = tf.Variable([0.1] * FEATURE_COUNT) 12 # 最終出力(予測) 13 prediction = tf.matmul(last_state, w) + b 14 15 # 損失関数(平均絶対誤差:MAE)と最適化(Adam) 16 loss = tf.reduce_mean(tf.map_fn(tf.abs, y - prediction)) 17 optimizer = tf.train.AdamOptimizer().minimize(loss) 18 19 # バッチサイズ 20 BATCH_SIZE = 16 21 # 学習回数 22 NUM_TRAIN = 10_000 23 # 学習中の出力頻度 24 OUTPUT_BY = 500 25 26 # 標準化 27 train_mean = train_dataset.mean() 28 train_std = train_dataset.std() 29 standardized_train_dataset = train_dataset.standardize() 30 31 # 学習の実行 32 sess.run(tf.global_variables_initializer()) 33 for i in range(NUM_TRAIN): 34 batch = standardized_train_dataset.next_batch(SERIES_LENGTH, BATCH_SIZE) 35 mae, _ = sess.run([loss, optimizer], feed_dict={x: batch[0], y: batch[1]}) 36 if i % OUTPUT_BY == 0: 37 print('step {:d}, error {:.2f}'.format(i, mae))

試したこと

インターネットで調べたところ

tf.reset_default_graph()

をループの頭に付け加えると解決するかもとの情報を得たのでやってみたのですが、
今度は

RuntimeError: The Session graph is empty. Add operations to the graph before calling run().

というエラーになってしまいました。

補足情報(FW/ツールのバージョンなど)

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

tensorflowの処理の順序として、
1)グラフ構築
2)sessionの定義(項番1で構築したグラフをひとまとめにするイメージ)
3)グラフの初期化
4)runによるグラフ実行
になります。

質問のコードはsessionの定義がないので、2回目のグラフが実行可能になっていません。言い換えると、rest_default_graphでクリアされたままになっています。

よって、initializerを実行する前にsess=...のコードを加えるとうまくいくはずです

投稿2018/09/29 07:05

R.Shigemori

総合スコア3376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問