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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

並列処理

複数の計算が同時に実行される手法

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

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

Q&A

1回答

807閲覧

kerasでの推論とスレッド処理の組合せについて

blacktt_red

総合スコア11

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

並列処理

複数の計算が同時に実行される手法

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

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

0グッド

0クリップ

投稿2020/09/24 02:57

前提・実現したいこと

kerasで画像分類を行っています。Tkinterのボタンを押すと推論が実行され、スコアが表示される
プログラムは作れましたが、最終的には外部信号を元に推論を実行したいです。
そのためThread処理でInput信号を検知し、推論させるプログラムに変更したところ下記エラー
が発生しました。(Input信号はget_signalに置換えています。)

対処法、回避方法についてお教え頂きたいためよろしくお願い致します。

発生している問題・エラーメッセージ

Exception in thread Thread-6: Traceback (most recent call last): File "C:\Users\tg30214.conda\envs\DL\lib\threading.py", line 916, in _bootstrap_inner self.run() File "C:\Users\tg30214.conda\envs\DL\lib\threading.py", line 864, in run self._target(*self._args, **self._kwargs) File "<ipython-input-1-a528fff6931d>", line 31, in get_signal check() File "<ipython-input-1-a528fff6931d>", line 42, in check pred = model.predict(img)[0][0] File "C:\Users\tg30214.conda\envs\DL\lib\site-packages\keras\engine\training.py", line 1452, in predict if self._uses_dynamic_learning_phase(): File "C:\Users\tg30214.conda\envs\DL\lib\site-packages\keras\engine\training.py", line 382, in _uses_dynamic_learning_phase not isinstance(K.learning_phase(), int)) File "C:\Users\tg30214.conda\envs\DL\lib\site-packages\keras\backend\tensorflow_backend.py", line 73, in symbolic_fn_wrapper if _SYMBOLIC_SCOPE.value: AttributeError: '_thread._local' object has no attribute 'value'

該当のソースコード

Python

1import tkinter as tk 2import cv2 3import os.path 4import cv2 5from PIL import Image 6import csv 7import datetime 8import sys 9import numpy as np 10import glob 11import datetime 12import pathlib 13import threading 14 15from keras import backend as K 16import tensorflow as tf 17from keras.preprocessing import image 18from keras.preprocessing.image import array_to_img 19from keras.models import load_model 20 21root = tk.Tk() 22root.title(u"Software Title") 23root.geometry("400x300") 24 25def get_signal(test): 26 a = test 27 while True: 28 a = a+1 29 if a == 10000: 30 check() 31 32 elif a > 10000: 33 a=0 34 35def check(): 36 image_path = r"C:\Users\tg30214\Desktop\NG0000.bmp" 37 img = cv2.imread(image_path) 38 img = np.expand_dims(img, axis=0) 39 img = img.astype("float32") 40 img = img/255.0 41 pred = model.predict(img)[0][0] 42 print(pred) 43 44Frame = tk.Frame(root) 45Frame.place(x=0.0, y=0.0, height=300, width=400) 46button1 = tk.Button(Frame,text="test", command=check) 47button1.place(x=0, rely=0, height=300 , width=400) 48 49model_path = r"C:\Users\tg30214\Desktop\20200707_finetuning_final.h5" 50model = load_model(model_path) 51 52t1=threading.Thread(target=get_signal, args=(0,)) 53t1.start() 54 55root.mainloop()

補足情報(FW/ツールのバージョンなど)

Windows 10 Pro, Python 3.7, keras 2.3.1, tensorflow 2.0.0

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

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

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

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

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

teamikl

2020/09/26 09:59

Tkinterの影響はないように思います。まずは、問題点を切り分けましょう root.mainloop() → t1.join() として、tkinterのコードは全て排除して問題は再現できますか? 類似問題としては、tensorflow のバージョン問題という報告を見ました。(自分では試してません)
blacktt_red

2020/09/27 22:53

ご質問事項について回答致します。 Tkinterの部分を除外して検討してみた結果、同一のエラーが発生致しました。 ```root.mainloop() → t1.join() ``` Tkinterのコード除外 そのためTkinterの影響でないことは確認できました。 バージョン問題については別途確認してみます。
teamikl

2020/09/28 00:46 編集

実際に試してませんが、幾つか解決の足掛かりになりそうな点 * karas のバージョンをダウングレードもしくは最新版(開発版?)にしてみる。 「AttributeError: '_thread._local' object has no attribute 'value'」で検索すると幾つか情報が見つかりました。 具体的なバージョンは報告により異なるので、 tensorflowのバージョン、karas のバージョン双方の確認が必要かもしれません(未確認) https://github.com/keras-team/keras/issues/13353 (※報告対象のft は 1.3) https://stackoverflow.com/questions/58015489/flask-and-keras-model-error-thread-local-object-has-no-attribute-value ※ バージョンあげたがダメだった報告もあります。 ※ コード側での対策出来た報告も有ですが、同時に利用するフレームワーク側の設定などなので、 状況に合わないかもしれません。 * 単体で実行した場合問題ないようなら、スレッドではなくマルチプロセスにする。 (別プロセスからtkinterは直接操作できないので、何らかのプロセス間通信は必要になります) ---- エラーが出ている問題とは関係なしに、model はメインスレッドから渡すのではなく get_signal 側で初期化した方が良いです。 スレッドやプロセスを跨いでのアクセスは問題になる事が多いので。
guest

回答1

0

メインスレッドから各関数へmodelを受け渡すようにします。

下記、先頭が「-」となっている各行を「+」行のように変えてください。

diff

1-def get_signal(test): 2+def get_signal(test, model): 3 a = test 4 while True: 5 a = a+1 6 if a == 10000: 7- check() 8+ check(model) 9 elif a > 10000: 10 a=0 11 12-def check(): 13+def check(model): 14# 後略

diff

1# 前略 2model = load_model(model_path) 3 4- t1=threading.Thread(target=get_signal, args=(0,)) 5+ t1=threading.Thread(target=get_signal, args=(0, model))

投稿2020/09/24 11:01

sfdust

総合スコア1137

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

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

blacktt_red

2020/09/25 03:47 編集

回答頂きありがとうございます。ご指摘に沿ってコードを下記内容に変更 してみたのですが、同一のエラーが発生しております。 コード内容に問題ありませんでしょうか。 ###コード内容 ``` root = tk.Tk() root.title(u"Software Title") root.geometry("400x300") def get_signal(test,m): a = test while True: a = a+1 if a == 10000: check(m) a =0 def check(m): image_path = r"C:\Users\tg30214\Desktop\NG0000.bmp" img = cv2.imread(image_path) img = np.expand_dims(img, axis=0) img = img.astype("float32") img = img/255.0 pred = m.predict(img)[0][0] print(pred) Frame = tk.Frame(root) Frame.place(x=0.0, y=0.0, height=300, width=400) button1 = tk.Button(Frame,text="test", command=check) button1.place(x=0, rely=0, height=300 , width=400) model_path = r"C:\Users\tg30214\Desktop\20200707_finetuning_final.h5" model = load_model(model_path) t1=threading.Thread(target=get_signal, args=(0,model)) t1.start() root.mainloop() ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問