🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

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

Q&A

解決済

1回答

1432閲覧

DjangoでKerasを動作させるとAttributeError

yamayamak

総合スコア131

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

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

0グッド

0クリップ

投稿2020/01/01 13:26

編集2020/01/01 14:02

DjangoでKerasを動作させるとAttributeError(詳細は以下のエラー参照)となります。

Djangoではなく、以下のプログラムの最後に2行を追加しPythonコマンド「python ファイル名」で実行するとエラーとならず、正常に動作します。

#最後に追加した二行 testData="0,2,1106,0657,196,196,173,183,0,0,0,0,-26,-26,-41,-34,0,2,1106,0658,183,191,174,187,0,0,0,0,-35,-25,-43,-35,(省略),0,2,1106,0935,8,24,8,12,0,0,0,0,-3,1,-3,0,0,2,1106,0936,9,26,-37,0,0,0,0,0,1,2,-1,0" ai_predict(testData)

Djangoは同じユーザから「python manage.py runserver」で起動しているのでPython,keras,tensorflowなどのバージョンに差分はないと考えています。
また、Djangoで「predicted = model.predict(X, verbose=0)」の前にリターンで強制的に終了すると問題は発生しないので予測させているこの1行で問題が発生していると考えています。
(modelのLoadをPredict直前で実施してもエラーは同様でした。)

解決方法がわからないので、ご教授をお願いします。

error

1Traceback (most recent call last): 2 File "/home/user1/.pyenv/versions/3.6.8/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner 3 response = get_response(request) 4 File "/home/user1/.pyenv/versions/3.6.8/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response 5 response = self.process_exception_by_middleware(e, request) 6 File "/home/user1/.pyenv/versions/3.6.8/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response 7 response = wrapped_callback(request, *callback_args, **callback_kwargs) 8 File "/home/user1/.pyenv/versions/3.6.8/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view 9 return view_func(*args, **kwargs) 10 File "/home/user1/.pyenv/versions/3.6.8/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view 11 return view_func(*args, **kwargs) 12 File "/home/user1/.pyenv/versions/3.6.8/lib/python3.6/site-packages/django/views/generic/base.py", line 71, in view 13 return self.dispatch(request, *args, **kwargs) 14 File "/home/user1/.pyenv/versions/3.6.8/lib/python3.6/site-packages/rest_framework/views.py", line 505, in dispatch 15 response = self.handle_exception(exc) 16 File "/home/user1/.pyenv/versions/3.6.8/lib/python3.6/site-packages/rest_framework/views.py", line 465, in handle_exception 17 self.raise_uncaught_exception(exc) 18 File "/home/user1/.pyenv/versions/3.6.8/lib/python3.6/site-packages/rest_framework/views.py", line 476, in raise_uncaught_exception 19 raise exc 20 File "/home/user1/.pyenv/versions/3.6.8/lib/python3.6/site-packages/rest_framework/views.py", line 502, in dispatch 21 response = handler(request, *args, **kwargs) 22 File "/home/user1/.pyenv/versions/3.6.8/lib/python3.6/site-packages/rest_framework/decorators.py", line 50, in handler 23 return func(*args, **kwargs) 24 File "/home/user1/zeus_cloud/app_zeus/views.py", line 25, in ai_job 25 aiJudge = ai_predict(getData) 26 File "/home/user1/zeus_cloud/app_zeus/ai_predict.py", line 32, in ai_predict 27 predicted = model.predict(X, verbose=0) 28 File "/home/user1/.pyenv/versions/3.6.8/lib/python3.6/site-packages/keras/engine/training.py", line 1452, in predict 29 if self._uses_dynamic_learning_phase(): 30 File "/home/user1/.pyenv/versions/3.6.8/lib/python3.6/site-packages/keras/engine/training.py", line 382, in _uses_dynamic_learning_phase 31 not isinstance(K.learning_phase(), int)) 32 File "/home/user1/.pyenv/versions/3.6.8/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py", line 73, in symbolic_fn_wrapper 33 if _SYMBOLIC_SCOPE.value: 34AttributeError: '_thread._local' object has no attribute 'value'

python

1import keras 2from keras import backend as K 3import numpy as np 4import logging 5 6logger = logging.getLogger("file") 7 8savefile = '/home/user1/zeus_cloud/fx_ai.h5' 9 10n = 160 11n_classes = 3 12# 学習済ファイルを読み込んでmodelを作成 13model = keras.models.load_model(savefile) 14 15def ai_predict(getData): 16 npData = np.array(getData.split(","), dtype = np.int) 17 logger.info('recv num' + str(npData.shape[0])) 18 #logger.info(npData.shape[1]) 19 if npData.shape[0] != n*4*4: 20 logger.info('err num' + str(npData.shape[0])) 21 return (1) 22 23 X = npData.reshape(1, 1, n, 4*4) 24 25 # 予測結果の取得 26 #model = keras.models.load_model(savefile) 27 predicted = model.predict(X, verbose=0) 28 predicted_label = np.argmax(predicted[0]) 29 30 logger.info('aiJudge:' + str(predicted_label)) 31 32 return (predicted_label)

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

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

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

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

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

mistn

2020/01/01 13:59

2行を追加し、とありますがどのようなコードを追加して実行しているのでしょうか。 ai_predictの引数であるgetDataにはどのようなデータが入ってくるのでしょうか。 関数に問題がないとすればこのgetDataが怪しいと思うので詳しくお願いします。
yamayamak

2020/01/01 14:07

連絡ありがとうございます。 追加した2行を記載しました。コマンドで実施する場合はデータは手動で設定しています。 念の為、Djangoでもデータを直接記載して実行しましたが、やはりDjangoでは上記エラーが発生します。 Djangoから実行する場合とコマンドでは何か環境が変わるのではないかと考えていますが、よくわかりません。 よろしくお願いします。
mistn

2020/01/01 14:15

追記して頂いたのに申し訳ないのですが少し調べてみたところ原因は別のところにありそうです。 githubにissueが上がっていました。 https://github.com/keras-team/keras/issues/13353 これによるとtensorflow、kerasのバージョンを tensorflow==1.14 keras==2.2.5 とすることで解決するようです。 一度試してみてくれませんか?
yamayamak

2020/01/01 14:31

pip install keras==1.14 pip install keras==2.2.5 でインストールして python -c 'import tensorflow as tf; print(tf.__version__)' python -c 'import keras as kr; print(kr.__version__)' でバージョンを確認しましたが、コマンドでは動作しDjangoでは動作しませんでした。 ただ、エラー内容は違っていました。 ValueError("Tensor %s is not an element of this graph." % obj) です。ただ、Warninigが起動時にいくつか発生してしまうので、 また、 https://discuss.streamlit.io/t/attributeerror-thread-local-object-has-no-attribute-value/574/2 も参照し、バージョンもこちらに合わせていて import keras.backend.tensorflow_backend as tb tb._SYMBOLIC_SCOPE.value = True を記載してもNGでした。 現在のバージョンは、django 3.0.1 keras 2.3.1, tensorflow 2.0.0, python 3.6.8 です。
guest

回答1

0

ベストアンサー

私の環境で状況を再現し、解決できた方法を書いておきます。
python 3.7.3
tensorflow 2.0.0
keras 2.3.1
django 3.0.1

python manage.py runserverで起動する場合にエラーが起きるようです。
gunicornを使ってサーバーを起動した場合はエラーは置きませんでした。
この方法が最小限の労力で解決できる方法だと思います。

python manage.py runserverで起動したい場合はtb._SYMBOLIC_SCOPE.value = Trueai_predictの関数内に書いてみてください。
エラーは出なくなると思います。

投稿2020/01/01 17:20

編集2020/01/01 17:28
mistn

総合スコア1191

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

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

yamayamak

2020/01/01 22:36

大変ありがとうございます! ご指摘のgunicornで起動すれば問題はなくなりました。 とりあえずこちらで進めたいと思いますm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問