如果我使用tensorflow.saved_model.save
SavedModel格式的函数保存模型,那么以后如何检索该模型中使用的Tensorflow Ops。由于可以还原模型,因此这些操作存储在图中,我的猜测在saved_model.pb
文件中。如果我加载此protobuf(而不是整个模型),则protobuf的库部分会列出这些,但目前尚未记录和标记为实验功能。在Tensorflow 1.x中创建的模型将没有此部分。
那么,从SavedModel格式的模型中检索使用过的操作列表(如MatchingFiles
或WriteFile
)的快速可靠的方法是什么?
现在,我可以像冻结一样冻结整个事情tensorflowjs-converter
。因为他们还会检查受支持的操作。当模型中包含LSTM时,这当前不起作用,请参见此处。因为Ops肯定在那里,有没有更好的方法呢?
示例模型:
class FileReader(tf.Module):
@tf.function(input_signature=[tf.TensorSpec(name='filename', shape=[None], dtype=tf.string)])
def read_disk(self, file_name):
input_scalar = tf.reshape(file_name, [])
output = tf.io.read_file(input_scalar)
return tf.stack([output], name='content')
file_reader = FileReader()
tf.saved_model.save(file_reader, 'file_reader')
预期输出所有操作,在这种情况下至少包含:
ReadFile
描述在这里- ...
我想从存储的SavedModel中检索操作。所以确实,您正在描述的最后一个选项。
—
sampers
saved_model
您上一个示例中的变量是什么?结果tf.saved_model.load('/path/to/model')
或加载saved_model.pb文件的protobuf的。
saved_model.pb
,它是tf.GraphDef
还是SavedModel
protobuf信息?如果您有tf.GraphDef
通话gd
,您可以使用来获得使用过的操作列表sorted(set(n.op for n in gd.node))
。如果您有加载的模型,则可以执行sorted(set(op.type for op in tf.get_default_graph().get_operations()))
。如果是SavedModel
,则可以从中获取tf.GraphDef
(例如saved_model.meta_graphs[0].graph_def
)。