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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

6955閲覧

Tensorflowの sess.runのエラー

Bonziri

総合スコア16

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/06/24 13:13

編集2019/07/05 09:27

ミニバッチ学習をTensorflowで書いていたところ,
sess.run(train_step, feed_dict = {X: batch_x, t: batch_t})

Attempted to use a closed Session.
というエラーがでました.
エラーの内容を調べてみましたが改善方法がわかりません.
よろしくお願いします.

エラーコード

RuntimeError Traceback (most recent call last) <ipython-input-106-037e1a6e1227> in <module> 10 batch_x = train_x[sff_idx[idx: idx + batch_size]] 11 batch_t = train_t[sff_idx[idx: idx + batch_size]] ---> 12 sess.run(train_step, feed_dict = {X: batch_x, t: batch_t}) 13 14 if epoch % 100 == 0: ~\Anaconda3\envs\cpu\lib\site-packages\tensorflow\python\client\session.py in run(self, fetches, feed_dict, options, run_metadata) 948 try: 949 result = self._run(None, fetches, feed_dict, options_ptr, --> 950 run_metadata_ptr) 951 if run_metadata: 952 proto_data = tf_session.TF_GetBuffer(run_metadata_ptr) ~\Anaconda3\envs\cpu\lib\site-packages\tensorflow\python\client\session.py in _run(self, handle, fetches, feed_dict, options, run_metadata) 1094 # Check session. 1095 if self._closed: -> 1096 raise RuntimeError('Attempted to use a closed Session.') 1097 if self.graph.version == 0: 1098 raise RuntimeError('The Session graph is empty. Add operations to the ' RuntimeError: Attempted to use a closed Session.

記述コード

入力層:60,隠れ層:60,出力層:1 のNNを作成しようとしています
入力データは(60,120)で60次元のデータを120個用意しており,内100個を学習データ,残り20個をテストデータにしています
出力データは(120,1)で1次元データを120個用意し,内100個を学習データ,残り20個をテストデータにしています
これらは,記述コードより前でcsvファイルから読み込み済みです
エラーが出ているのは最後の行のみです.

##学習を実行 with tf.Session() as sess: init_op = tf.global_variables_initializer() sess.run(init_op) ##学習データを習得 from sklearn.model_selection import train_test_split ##説明変数(入力特徴量) x = DataFrame(input_data) x2 = DataFrame(input_test_data) ##目的変数(評価データ) y = DataFrame(learning_output_data) y2 = DataFrame(learning_test_data) ##説明変数・目的変数をそれぞれ訓練データ・テストデータに分割 train_x = x test_x = x2 train_t = y test_t = y2 #データの整形 train_x = train_x.astype(np.float) test_x = test_x.astype(np.float) train_t = keras.utils.to_categorical(train_t) test_t = keras.utils.to_categorical(test_t) ##ミニバッチ学習 num_epoch = 10000 num_data = train_x.shape[0] batch_size = 10 for epoch in range(num_epoch): sff_idx = np.random.permutation(num_data) for idx in range(0, num_data, batch_size): batch_x = train_x[sff_idx[idx: idx + batch_size]] batch_t = train_t[sff_idx[idx: idx + batch_size]] sess.run(train_step, feed_dict = {X: batch_x, t: batch_t})

補足情報

jupyter notebook 使用

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーメッセージの直訳です。

閉じられたセッションを使用しようとしました

すなわち、with構文によりsessがcloseされているのが原因だと思います。

with構文を実行すると、インデント内のコードが実行された後自動的にclose処理が行われてしまいます。

python

1with tf.Session() as sess: 2 init_op = tf.global_variables_initializer() 3 sess.run(init_op) 4  #自動的に閉じる

以下のようにインデントを調整するのがよろしいかと思います。

python

1##学習を実行 2with tf.Session() as sess: 3 init_op = tf.global_variables_initializer() 4 sess.run(init_op) 5 6#ここからインデント調整 7 8 ##学習データを習得 9 from sklearn.model_selection import train_test_split 10 ##説明変数(入力特徴量) 11 x = DataFrame(input_data) 12 x2 = DataFrame(input_test_data) 13 ##目的変数(評価データ) 14 y = DataFrame(learning_output_data) 15 y2 = DataFrame(learning_test_data) 16 ##説明変数・目的変数をそれぞれ訓練データ・テストデータに分割 17 train_x = x 18 test_x = x2 19 train_t = y 20 test_t = y2 21 22 #データの整形 23 train_x = train_x.astype(np.float) 24 test_x = test_x.astype(np.float) 25 26 train_t = keras.utils.to_categorical(train_t) 27 test_t = keras.utils.to_categorical(test_t) 28 29 ##ミニバッチ学習 30 num_epoch = 10000 31 num_data = train_x.shape[0] 32 batch_size = 10 33 for epoch in range(num_epoch): 34 35 sff_idx = np.random.permutation(num_data) 36 37 for idx in range(0, num_data, batch_size): 38 batch_x = train_x[sff_idx[idx: idx + batch_size]] 39 batch_t = train_t[sff_idx[idx: idx + batch_size]] 40 sess.run(train_step, feed_dict = {X: batch_x, t: batch_t}) 41

投稿2019/06/24 15:06

amahara_waya

総合スコア1029

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

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

Bonziri

2019/06/25 01:03

Pythonでコードをちゃんと書くのは初めてだったので見落としていました 別のエラーが出てきてしまいましたが,この部分は無事解決しました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問