Mnemosyne

Linux, 機械学習について個人的なメモを綴っていきます

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グラフを壊し,新たなものを作成します.

古いモデル/レイヤが散らかってしまうを避けるのに役立ちます.

バックエンド - Keras Documentation

どうやらメモリ解放的な操作が必要なみたい