Python TensorFlow:如何在没有源代码的情况下发布模型?
我正在使用Tensorflow+Python 我很好奇是否可以在没有详细源代码的情况下发布一个保存的Tensorflow模型(体系结构+经过训练的变量)。我知道Python TensorFlow:如何在没有源代码的情况下发布模型?,python,tensorflow,Python,Tensorflow,我正在使用Tensorflow+Python 我很好奇是否可以在没有详细源代码的情况下发布一个保存的Tensorflow模型(体系结构+经过训练的变量)。我知道tf.train.Saver(),但它看起来只保存变量,为了恢复/运行它们,用户需要“定义”相同的体系结构 仅出于测试/运行目的,是否有一种方法可以在不使用源代码的情况下发布保存的{architecture+trained variables},这样用户就可以直接进行查询并获得结果?该项目旨在使此用例变得简单(假设最终用户仅使用模型进行推
tf.train.Saver()
,但它看起来只保存变量,为了恢复/运行它们,用户需要“定义”相同的体系结构
仅出于测试/运行目的,是否有一种方法可以在不使用源代码的情况下发布保存的{architecture+trained variables},这样用户就可以直接进行查询并获得结果?该项目旨在使此用例变得简单(假设最终用户仅使用模型进行推理,而不是培训)。TensorFlow服务包括一个导出器
类,该类接受您的tf.train.Saver
,定义您的整体模型的tf.GraphDef
,以及一个描述模型输入和输出的“签名”
对导出模型有很好的介绍。您可以从MetaGraphDef(默认情况下使用检查点保存:那些.meta文件)构建
保存程序。然后使用该保护程序恢复您的模型。因此用户不必在代码中重新定义图形。但是他们仍然需要找出模型特征(输入、输出变量)。我使用tf.Collection
解决这个问题(但我也有兴趣找到更好的方法)
您可以看一下我的示例实现(无需重新定义模型即可对模型进行评估的eval.py
):
- 从元图重构存储程序
- 从集合中获取输入变量
- 如何定义模型
通过实施,您是否从经过培训的模型中检索到正确的权重?我只能看到您得到了输入和输出层(+)@NicolaiAntonLynnerup是的,保护程序负责从每个变量的检查点文件中加载二进制文件。您提到的行检索必要的输入和输出变量(而不是层),因此我们可以在求值中执行图形:将它们视为函数签名,可视化分类器映射图像->类逻辑。换句话说,如果没有这些变量(占位符也是变量),我们就无法构造此调用: