Python TensorFlow:将py_func保存到.pb文件
我尝试构建一个tensorflow模型——在这里,我使用tf.py_func在普通python代码中创建代码的一部分。问题是,当我将模型保存到.pb文件时,.pb文件本身非常小,并且不包括py_func:0张量。当我尝试从.pb文件加载并运行模型时,出现以下错误:get ValueError:未找到回调pyfunc_0 当我不保存并加载为.pb文件时,它就可以工作了 有人能帮忙吗。这对我来说非常重要,给了我几个不眠之夜Python TensorFlow:将py_func保存到.pb文件,python,tensorflow,Python,Tensorflow,我尝试构建一个tensorflow模型——在这里,我使用tf.py_func在普通python代码中创建代码的一部分。问题是,当我将模型保存到.pb文件时,.pb文件本身非常小,并且不包括py_func:0张量。当我尝试从.pb文件加载并运行模型时,出现以下错误:get ValueError:未找到回调pyfunc_0 当我不保存并加载为.pb文件时,它就可以工作了 有人能帮忙吗。这对我来说非常重要,给了我几个不眠之夜 model_version = "465555564" tensorboar
model_version = "465555564"
tensorboard = TensorBoard(log_dir='./logs', histogram_freq = 0, write_graph = True, write_images = False)
sess = tf.Session()
K.set_session(sess)
K.set_learning_phase(0)
def my_func(x):
some_function
input = tf.placeholder(tf.float32)
y = tf.py_func(my_func, [input], tf.float32)
prediction_signature = tf.saved_model.signature_def_utils.predict_signature_def({"inputs": input}, {"prediction": y})
builder = saved_model_builder.SavedModelBuilder('./'+model_version)
legacy_init_op = tf.group(tf.tables_initializer(), name='legacy_init_op')
builder.add_meta_graph_and_variables(
sess, [tag_constants.SERVING],
signature_def_map={
signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY:prediction_signature,
},
legacy_init_op=legacy_init_op)
builder.save()
有一种方法可以使用
TF.py_func
保存TF模型,但是您必须使用SavedModel
而不使用
TF有两个模型保存级别:检查点和SavedModels
。有关更多详细信息,请参见,但请在此处引用:
- 检查点包含TensorFlow模型中(某些)变量的值。它是由一个。要使用检查点,您需要有一个兼容的TensorFlow
,其图形
与检查点中的变量
具有相同的名称变量
- 更全面:它包含一组
s(,实际上是保存集合等),以及一个与这些Graph
s兼容的检查点,以及运行模型所需的任何资产文件(例如词汇表文件)。对于它包含的每个Graph
,它还存储一组签名。签名定义(命名)输入和输出张量元图
tf.py_func
op无法与SavedModel
(上有说明)一起保存,这正是您在此处尝试执行的操作。这是有充分理由的SavedModel
s应该完全独立于原始代码,可以用任何其他可以反序列化它的语言加载。这允许模型加载的东西,这可能是写在C++或类似的东西。问题是它无法序列化任意Python代码,因此py_func
是不可能的
您可以通过使用检查点来解决这个问题,只要您不介意使用Python。您将无法获得SavedModel
s提供的独立性。您可以在使用tf.train.Saver
进行培训后保存一个检查点,然后在新的会话中重新构建整个图形并使用该Saver
加载它。甚至还有一种在ML引擎中使用该代码的方法,该引擎过去专门用于SavedModel
s。您可以使用来回避对SavedModel
的需要
有关在中保存/恢复模型的详细信息。这是其局限性之一。“函数体(即func)将不会在GraphDef中序列化”我是否可以绕过此问题?我要做的是加载一个包含“Random Forrest Model”的.pickle文件。我想在TensorFlow内部运行的模型您可以尝试使用autograph,TensorFlow中有一个随机林的实现,请参阅。注意:这是当前位于tf.contrib
下的内容,其中。请参阅RFC以了解已接受的张索森林计划。