我的问题是使用Mobilenet SSD进行目标检测,然后使用在Keras中训练的CNN分类器读取边界框中的数据。每当获得一个边界框后,就必须使用CNN分类器进行评估。在查阅了Git和Stack上的多个问题后,我开始编写自己的代码。然而,在使用tf.reset_default_graph()重置TF图并从Keras加载.h5文件后,抛出了一个错误,如下所示:
"ValueError: Tensor("loss/dense_6_loss/Const:0", shape=(), dtype=float32) must be from the same graph as Tensor("truediv_19:0", shape=(?, 36), dtype=float32)."
我正在使用Keras和Tensorflow作为后端进行实例检测和图像检索任务。
显示错误:ValueError: tensor a must be from the same graph as tensor b.
代码如下:
Merge.pyfrom keras import backend as Kg1=tf.Graph()g2=Graph()sess1=tf.Session(graph=g1)sess2=Session(graph=g2)def intiMaskrcnn(): with g1.as_default(): with sess1.as_default(): Model1=........tf.rest_defaut_graph()def instanceDetect(): K.set_session(sess1) with g1.as_default(): Model1.predit() ............k.clear_session()def intiMobilenet(): with g2.as_default(): with sess2.as_default(): Model2=........def Retrieval(): K.set_session(sess2) with g2.as_default(): Model2.predit() ............
我想知道是否可以将Tensorflow和Keras同时整合到一个流程中,如果可以,如何实现?提前感谢
回答:
这有助于我在Tensorflow SSD目标检测中运行Keras模型。
* Use Seperate Graph.* Use Seperate Session.* reset the default Graph using tf.reset_default_graph()* for keras Use K.clearfrom keras.models import load_modelwith tf.Session(graph=K.get_session().graph) as session: session.run(tf.global_variables_initializer()) model = load_model('model.h5') predictions = model.predict(input)