python - Keras(Tensorflow 后端)错误 - 在图中未找到在 feed_devices 或 fetch_devices 中指定的张量 input_1:0
问题描述
尝试使用我之前训练过的简单模型进行预测时,出现以下错误:
在图中未找到在 feed_devices 或 fetch_devices 中指定的张量 input_1:0
在线:
seatbelt_model.predict(image_arr, verbose=1)
在代码中:
from tensorflow import keras
import tensorflow as tf
import numpy as np
graph = tf.get_default_graph()
seatbelt_model = keras.models.load_model(filepath='./graphs/seatbelt_A_3_81.h5')
class SeatbeltPredictor:
INPUT_SHAPE = (-1, 120, 160, 1)
@staticmethod
def predict_seatbelt(image_arr):
with graph.as_default():
image_arr = np.array(image_arr).reshape(SeatbeltPredictor.INPUT_SHAPE)
predicted_labels = seatbelt_model.predict(image_arr, verbose=1)
return predicted_labels
该模型具有以下形状:
input_layer = keras.layers.Input(shape=(IMAGE_HEIGHT, IMAGE_WIDTH, 1))
conv_0 = keras.layers.Conv2D(filters=32, kernel_size=[5, 5], activation=tf.nn.relu, padding="SAME")(input_layer)
pool_0 = keras.layers.MaxPool2D(pool_size=[2, 2], strides=2, padding="VALID")(conv_0)
conv_1 = keras.layers.Conv2D(filters=32, kernel_size=[5, 5], activation=tf.nn.relu, padding="SAME")(pool_0)
pool_1 = keras.layers.MaxPool2D(pool_size=[2, 2], strides=2, padding="VALID")(conv_1)
flat_0 = keras.layers.Flatten()(pool_1)
dense_0 = keras.layers.Dense(units=1024, activation=tf.nn.relu)(flat_0)
drop_0 = keras.layers.Dropout(rate=0.4, trainable=True)(dense_0)
dense_1 = keras.layers.Dense(units=2, activation=tf.nn.softmax)(drop_0)
如果我运行以下命令,我会得到一个张量结果:
graph.get_tensor_by_name('input_1:0')
<tf.Tensor 'input_1:0' shape=(?, 120, 160, 1) dtype=float32>
第一层的名字是 input_1
image_arr 的形状为 (1, 120, 160, 1)
张量流 1.12
有任何想法吗?
解决方案
好的,在经历了很多痛苦和折磨并潜入 tensorflow 的内部之后,我发现了以下内容:
虽然模型有 Session 和 Graph,但在一些 tensorflow 方法中,使用的是默认的 Session 和 Graph。为了解决这个问题,我必须明确地说我想同时使用我的 Session 和我的 Graph 作为默认值:
with session.as_default():
with session.graph.as_default():
完整代码:
from tensorflow import keras
import tensorflow as tf
import numpy as np
import log
config = tf.ConfigProto(
device_count={'GPU': 1},
intra_op_parallelism_threads=1,
allow_soft_placement=True
)
config.gpu_options.allow_growth = True
config.gpu_options.per_process_gpu_memory_fraction = 0.6
session = tf.Session(config=config)
keras.backend.set_session(session)
seatbelt_model = keras.models.load_model(filepath='./seatbelt.h5')
SEATBEL_INPUT_SHAPE = (-1, 120, 160, 1)
def predict_seatbelt(image_arr):
try:
with session.as_default():
with session.graph.as_default():
image_arr = np.array(image_arr).reshape(SEATBEL_INPUT_SHAPE)
predicted_labels = seatbelt_model.predict(image_arr, verbose=1)
return predicted_labels
except Exception as ex:
log.log('Seatbelt Prediction Error', ex, ex.__traceback__.tb_lineno)
推荐阅读
- vb.net - 在两个表单都显示在屏幕上时在表单之间传递字符串
- swagger - 为 swagger 设置本地编辑器
- android - 从小米的最近列表中刷出后服务未重新启动
- javascript - 如何将div变成一个按钮?
- android - 如何在android中的地图活动(片段活动)中显示弹出窗口
- pyqt5 - PyQt5 QTableView 用 Delegate 选择单元格背景
- javascript - 翻译 docker yaml 文件时出现不规则符号
- react-native - 如何在上传图像之前在图像选择器中裁剪图像
- python-3.x - 导入模块 VSCode Python3
- url - 将域名添加到 Heroku 托管给了我 DNS 目标中的未知 url