keras v2.0を用いた処理を行った最後にExceptionエラーが発生
kerasを用いた、MLP(Multi Layer Perceptron)でMNISTを試してみたところ
処理の終了時にExceptionエラーが発生したので、対処法をメモ
まず、使用しているパッケージのversionは
- Keras (2.0.8)
- tensorflow (1.3.0)
使用したソースコードは以下の通り。
# -*- coding: utf-8 -*- from keras.datasets import mnist from keras.models import Sequential from keras.layers.core import Dense, Activation from keras.utils import np_utils #kerasに含まれるMNISTデータの取得 (X_train, y_train), (X_test, y_test) = mnist.load_data() X_train = X_train.reshape(60000, 784) / 255 X_test = X_test.reshape(10000, 784) / 255 y_train = np_utils.to_categorical(y_train) y_test = np_utils.to_categorical(y_test) # ネットワークの定義 # 各層や活性関数に該当するレイヤを順に入れていく # 作成したあとにmodel.add()で追加することも可能 model = Sequential([ Dense(512, input_shape=(784,)), Activation('sigmoid'), Dense(10), Activation('softmax') ]) # 損失関数、 最適化アルゴリズムなどを設定しモデルのコンパイルを行う model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy']) # 学習処理の実行 model.fit(X_train, y_train, batch_size=200, verbose=1, epochs=20, validation_split=0.1) # 予測 score = model.evaluate(X_test, y_test, verbose=1) print('test accuracy : ', score[1])
発生したエラーは
Exception ignored in:
Traceback (most recent call last):
File "/root/.virtualenvs/cv/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 701, in __del__
TypeError: 'NoneType' object is not callable
???
よく分からなかったのでエラー文でググると以下のサイト様がヒットしました。
keras+tensorflowで終了処理でエラーが発生する | CodeLab技術ブログ
どんぴしゃです・・・ありがとうございます。
#バックエンドをインポート from keras.backend import tensorflow_backend as backend #処理終了時に下記をコール backend.clear_session()
上記をソースに書き込んで無事解決。
公式HPより:
clear_session
clear_session()
現在のTFグラフを壊し,新たなものを作成します.古いモデル/レイヤが散らかってしまうを避けるのに役立ちます.
どうやらメモリ解放的な操作が必要なみたい