私は今、Aidemy Premium Planという、未経験者が3か月で機械学習、ディープラーニング、データ分析、AIアプリ開発まで最先端技術を幅広く学べるオンライン学習サービスで勉強しています。
その中のAIアプリ開発コースにおいて、「手書き文字認識アプリ』を作成します。このアプリは、手書き数字の画像をアップロードすると、その数字が0~9のどの数字なのかを返すアプリです。
アプリは、Flaskを使って作成します。Flaskとは、Pythonのための軽量なウェブアプリケーションフレームワークです。割と簡単にpythonを使ったアプリを作成することができます。
今回は、手書き文字認識アプリにおいて、Tensorflowのエラーが発生して困っていたときに、Flaskのバージョンを下げたら解決したという話をします。
と〜げ
同じようなエラーで困っている人がいたら、その参考になれば幸いです。
Tensorflowのエラーが発生
手書き文字認識アプリにおいて、手書き数字画像をアップロートしたときに、webブラウザの画面が以下のように『Internal Server Error』と表示されます。
ターミナルには、以下のようなエラーが表示されます。
127.0.0.1 – – [02/Dec/2019 01:17:15] “GET / HTTP/1.1” 200 –
/Applications/anaconda3/lib/python3.7/site-packages/keras_preprocessing/image/utils.py:104: UserWarning: grayscale is deprecated. Please use color_mode = “grayscale”
warnings.warn(‘grayscale is deprecated. Please use ‘
[2019-12-02 01:17:25,060] ERROR in app: Exception on / [POST]
Traceback (most recent call last):
File “/Applications/anaconda3/lib/python3.7/site-packages/flask/app.py”, line 2446, in wsgi_app
response = self.full_dispatch_request()
File “/Applications/anaconda3/lib/python3.7/site-packages/flask/app.py”, line 1951, in full_dispatch_request
rv = self.handle_user_exception(e)
File “/Applications/anaconda3/lib/python3.7/site-packages/flask/app.py”, line 1820, in handle_user_exception
reraise(exc_type, exc_value, tb)
File “/Applications/anaconda3/lib/python3.7/site-packages/flask/_compat.py”, line 39, in reraise
raise value
File “/Applications/anaconda3/lib/python3.7/site-packages/flask/app.py”, line 1949, in full_dispatch_request
rv = self.dispatch_request()
File “/Applications/anaconda3/lib/python3.7/site-packages/flask/app.py”, line 1935, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File “mnist.py”, line 52, in upload_file
result = model.predict(data)[0]
File “/Applications/anaconda3/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py”, line 1113, in predict
self, x, batch_size=batch_size, verbose=verbose, steps=steps)
File “/Applications/anaconda3/lib/python3.7/site-packages/tensorflow/python/keras/engine/training_arrays.py”, line 329, in model_iteration
batch_outs = f(ins_batch)
File “/Applications/anaconda3/lib/python3.7/site-packages/tensorflow/python/keras/backend.py”, line 3076, in __call__
run_metadata=self.run_metadata)
File “/Applications/anaconda3/lib/python3.7/site-packages/tensorflow/python/client/session.py”, line 1439, in __call__
run_metadata_ptr)
File “/Applications/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/errors_impl.py”, line 528, in __exit__
c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.FailedPreconditionError: Error while reading resource variable dense_69/bias from Container: localhost. This could mean that the variable was uninitialized. Not found: Resource localhost/dense_69/bias/N10tensorflow3VarE does not exist.
[[{{node dense_69/BiasAdd/ReadVariableOp}}]]
127.0.0.1 – – [02/Dec/2019 01:17:25] “POST / HTTP/1.1” 500 –
太字の部分をみると、tensorflowのエラーが発生しているのがわかります。また、variable was uninitializedという部分から、変数の初期化ができていないという内容なのかな?と思われます。
Aidemyの講師の方にも相談させていただき、tensorflowの変数の初期化について教えてもらったり、ググって調べたりしましたが、解決しませんでした。また、tensorflowの再インストール、Anacondaの再インストールをしましたが、うまくいきませんでした。
解決した方法とは
Flaskのバージョンを、1.1.1から0.12.2に変更したら解決しました。
ターミナルで、『pip install Flask==0.12.2』と打てばバージョン0.12.2がインストールされます。
pip install Flask==0.12.2
インストールされているFlaskのバージョンをチェックするコマンドは、以下です。
python -c "import flask; print( flask.__version__ )"
ちなみに、Flaskの他のバージョンも試してみた結果は以下。
- 1.1.1:失敗
- 1.0.0:失敗
- 0:12:4:成功
- 0:12:3:成功
- 0:12:2:成功
tensorflowなどの他ライブラリのバージョンはこちらです。
- Tensorflow:1.13.1
- keras:2.3.1
- Python:3.7.4
余談ですが、ライブラリのバージョンを確かめたいときは、『pip list』をターミナルで打つと一覧で表示されてチェックが楽です。
どうしてFlaskのバージョンを下げてみようかと思ったかというと、『Flask tensorflow エラー』みたいな感じでググってみると、以下ページを見つけました。私のケースとは、異なるエラーでしたが、バージョンを下げて解決したと書いてあったので試しにやってみたという感じです。
参考サイト:FlaskでKeras使用時に起こるエラー: ‘The Session graph is empty’
ライブラリのバージョンも重要だということを学びました。