我有一些关于SavedModelAPI的问题,我找到的文档留下了很多细节无法解释.
前三个问题是关于什么传递给add_meta_graph_and_variables()方法的论据tf.saved_model.builder.SavedModelBuilder,而第四个问题是关于为什么要使用SavedModelAPI tf.train.Saver.
signature_def_map参数的格式是什么?保存模型时,我通常需要设置此参数吗?
同样,assets_collection论证的格式是什么?
为什么要保存带有元图的标签列表而不是只给它一个名字(即只附加一个唯一标签)?为什么我要为给定的元图添加多个标签?如果我尝试从pb某个标签加载metagrpah ,但是那个pb匹配该标签的多个元图怎么办?
该文档认为,建议用于SavedModel在自包含文件中保存整个模型(而不仅仅是变量).但tf.train.Saver除了.meta文件中的变量外,还会保存图形.那么使用有什么好处SavedModel?文件说
当您想要保存和加载变量,图形和图形的元数据时 - 基本上,当您想要保存或恢复模型时 - 我们建议使用SavedModel.SavedModel是一种语言中立的,可恢复的,密集的序列化格式.SavedModel支持更高级别的系统和工具来生成,使用和转换TensorFlow模型.
但这个解释很抽象,并没有真正帮助我理解它的优点SavedModel.什么是具体的例子SavedModel(相对于tf.train.Saver)会更好用?
请注意,我的问题与此问题不重复.我不是在问如何保存模型,我问的是关于属性的非常具体的问题SavedModel,这只是TensorFlow为保存和加载模型提供的多种机制之一.链接问题中的所有答案都没有触及SavedModelAPI(再次,它不同于tf.train.Saver).
我改为tf.train.SaverSavedModel格式,这意味着从磁盘加载我的模型要慢很多(而不是几秒钟,它需要几分钟).为什么这样做以及如何更快地加载模型?
我曾经这样做过:
# Save model
saver = tf.train.Saver()
save_path = saver.save(session, model_path)
# Load model
saver = tf.train.import_meta_graph(model_path + '.meta')
saver.restore(session, model_path)
Run Code Online (Sandbox Code Playgroud)
但现在我这样做:
# Save model
builder = tf.saved_model.builder.SavedModelBuilder(model_path)
builder.add_meta_graph_and_variables(session, [tf.saved_model.tag_constants.TRAINING])
builder.save()
# Load model
tf.saved_model.loader.load(session, [tf.saved_model.tag_constants.TRAINING], model_path)
Run Code Online (Sandbox Code Playgroud)