本文共 1432 字,大约阅读时间需要 4 分钟。
多线程跑TensorFlow多分类模型时遇到报错:
代码
如下:
在主函数中初始化模型import tensorflow as tftf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR) # 屏蔽WARNING★★mPath = r'model_VGG16_Straka.h5'model = tf.keras.models.load_model(mPath) =================================================================在另一个线程中进行分类img = cv.cvtColor(np.asarray(frame), cv.COLOR_BGR2RGB).reshape((1,720,1280,3))/255result = [classes[k] for k in np.argmax(np.asarray(model.predict(img, verbose=0, batch_size=1)),axis=1)]
问题所在:
在另一个线程/函数中,tf 2.1会认为是另一个程序在进行计算,我们需要保证只使用同一个session,因此需要将会话和图迁移过去。 注意:只要出现了模型预测的地方,都需要加下面的代码
。 在主函数中初始化模型并记录当前会话和图mPath = r'model_VGG16_Straka.h5'model = tf.keras.models.load_model(mPath,{ 'focal_loss_fixed': focal_loss(alpha=.25, gamma=2)}) graph = tf.get_default_graph()sess = tf.keras.backend.get_session() # 注意!!!多线程会导致sess和graph不同 必须提前记录下★★=================================================================在另一个线程中进行分类with sess.as_default(): with graph.as_default(): # 注意!!!多线程会导致sess和graph不同 必须在每次预测前手动更改 img = cv.cvtColor(np.asarray(frame), cv.COLOR_BGR2RGB).reshape((1,720,1280,3))/255 result = [classes[k] for k in np.argmax(np.asarray(model.predict(img, verbose=0, batch_size=1)),axis=1)]
转载地址:http://drzti.baihongyu.com/