TensorFlow:如何在使用save_model API重载时如何重载py_func之类的自定义节点?

时间:2018-07-19 15:08:38

标签: python-3.x tensorflow conv-neural-network

我的项目:Faster-RCNN-Win10-py3.6-TensorFlow。 我正在使用saved_model.loader.load重新加载.pb模型以进行测试。如果我加载.pb文件并运行run函数,则找不到带有tf.py_func节点的已定义的悬挂式pythonic代码预处理程序:

_, scores, bbox_pred, rois = tf.Session().run([op1, op2, op3, op4],
feed_dict = {_image: blobs['data'], _im_info: blobs['im_info']})

存在以下错误:

InvalidArgumentError: ValueError: callback pyfunc_0 is not found
Traceback (most recent call last): 
File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\ops\script_ops.py", line 154, in __call__
raise ValueError("callback %s is not found" % token)
ValueError: callback pyfunc_0 is not found

    [[Node: import/vgg_16/ANCHOR_default/generate_anchors = PyFunc[Tin=[DT_INT32, 
    DT_INT32, DT_INT32, DT_INT32, DT_FLOAT], Tout=[DT_FLOAT, DT_INT32], 
    token="pyfunc_0", _device="/job:localhost/replica:0/task:0/device:CPU:0"]
    (import/vgg_16/ANCHOR_default/ToInt32/_5, 
    import/vgg_16/ANCHOR_default/ToInt32_1/_7, import/vgg_16/rois/PyFunc/input_3, 
    import/vgg_16/ANCHOR_default/generate_anchors/input_3, 
    import/vgg_16/ANCHOR_default/generate_anchors/input_4)]]

如果在加载.pb文件之前没有调用Vgg16网络的初始化函数,原因一定是该API的标题中没有保存py_func包装的pythonic函数:

Net = vgg16(batch_size=1),
Net.create_architecture(sess, "TEST", 21, tag='default', anchor_scales=[8, 16, 32])

将发生此错误。但是我不想加载Vgg16网络,因为我想直接使用C ++运行.pb文件。我不想称呼Vgg16网络模型。有办法解决吗?

更新

我知道原因,因为vgg16就像自定义层一样,并且在sess.run之前,必须重新定义自定义层,那么如何将自定义层放入图形中?如果无法执行此操作,则意味着无法使用C ++直接加载python生成的.pb文件。我想使用python进行训练,并使用C ++加载此pb文件进行测试。

0 个答案:

没有答案