首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SavedModel - TFLite - SignatureDef - TensorInfo -获取中间层输出

在TensorFlow中,使用SavedModel格式保存模型后,可以通过TensorFlow Serving或直接在Python中使用tf.saved_model模块来加载和使用模型。如果你想要获取中间层的输出,可以通过定义SignatureDef来实现。以下是一个示例,展示了如何为SavedModel定义一个SignatureDef来获取中间层的输出。

1. 定义模型并保存为SavedModel格式

首先,定义一个简单的模型并保存为SavedModel格式:

代码语言:javascript
复制
import tensorflow as tf

# 定义一个简单的模型
class SimpleModel(tf.keras.Model):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.dense1 = tf.keras.layers.Dense(10, activation='relu')
        self.dense2 = tf.keras.layers.Dense(1)

    def call(self, inputs):
        x = self.dense1(inputs)
        return self.dense2(x)

# 创建模型实例
model = SimpleModel()

# 保存模型为SavedModel格式
tf.saved_model.save(model, 'saved_model')

2. 定义SignatureDef以获取中间层输出

接下来,定义一个SignatureDef来获取中间层的输出:

代码语言:javascript
复制
import tensorflow as tf
from tensorflow.python.saved_model import signature_constants
from tensorflow.python.saved_model import tag_constants

# 加载保存的模型
loaded = tf.saved_model.load('saved_model')

# 获取模型的输入和中间层输出张量
input_tensor = loaded.signatures[signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY].inputs['input_1']
dense1_output_tensor = loaded.signatures[signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY].variables['dense1/Relu:0']

# 定义一个新的SignatureDef来获取中间层输出
signature_def = tf.compat.v1.saved_model.signature_def_utils.build_signature_def(
    inputs={'input_1': input_tensor},
    outputs={'dense1_output': dense1_output_tensor},
    method_name=signature_constants.PREDICT_METHOD_NAME
)

# 保存新的SignatureDef
with tf.compat.v1.Session(graph=tf.Graph()) as sess:
    tf.compat.v1.saved_model.loader.load(sess, [tag_constants.SERVING], 'saved_model')
    builder = tf.compat.v1.saved_model.builder.SavedModelBuilder('saved_model_with_intermediate')
    builder.add_meta_graph_and_variables(
        sess,
        [tag_constants.SERVING],
        signature_def_map={
            'serving_default': signature_def
        }
    )
    builder.save()

3. 使用新的SavedModel获取中间层输出

现在,你可以使用新的SavedModel来获取中间层的输出:

代码语言:javascript
复制
import tensorflow as tf

# 加载新的SavedModel
loaded = tf.saved_model.load('saved_model_with_intermediate')

# 获取SignatureDef
infer = loaded.signatures['serving_default']

# 准备输入数据
input_data = tf.constant([[1.0, 2.0, 3.0, 4.0]])

# 调用SignatureDef获取中间层输出
result = infer(tf.constant([[1.0, 2.0, 3.0, 4.0]]))['dense1_output']

print(result)

通过这种方式,你可以为SavedModel定义一个SignatureDef来获取中间层的输出。请注意,这个示例使用了TensorFlow 1.x的API,如果你使用的是TensorFlow 2.x,可能需要进行一些调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何用TF Serving部署TensorFlow模型

我们需要为签名定义指定输入输出和方法名这些参数。这里输入输出表示一个从字符串到TensorInfo对象的映射(后面会详细介绍),定义了计算图中默认接收和输出的张量。...对于分类SignatureDef,需要一个输入张量(接收数据)以及可能的输出张量: 类别和/或得分。回归SignatureDef需要一个输入张量以及另一个输出张量。...最后预测SignatureDef需要一个可变长度的输入输出张量。 此外,SavedModel支持在操作初始化依赖于外部文件的情况下存储资产。也包括在构建SavedModel之前清空设备。...用SignatureDefs指定模型的输入输出张量。签名了模型导出的类型,签名提供了从字符(张量的逻辑名)到TensorInfo 对象的映射。...此外SignatureDef中的映射与TensorInfo protobuf形式的对象关联,而不是实际的张量。

3K20
  • TensorFlow 2.0 的新增功能:第三、四部分

    通过使用-h参数运行工具,可以在每个步骤中获取详细说明: saved_model_cli -h 可以通过在命令名称后调用-h参数来获取特定命令的说明。..." SignatureDef key: "serving_default" 现在,让我们看看如何使用run函数与直接使用命令行通过SavedModel保存的 TensorFlow 计算图进行交互,而无需编写任何代码...从上一阶段的输出中可以看到,有两个组件函数。 其中,我们选择使用serving_default SignatureDef。 现在,我们可以通过提供所需的输入并获得所需的结果,通过命令行运行它。...从上一阶段的输出中,我们可以观察到以下内容: 输出张量与输入张量具有相同的形状 输出张量中的值对应于我们输入张量中的值的平方 这些观察结果都确认SavedModel工作正常。...该模型可以是任何东西,从tf.keras自定义训练模型到从 TF 本身获取的预训练模型。 TFLite 入门 使用 TFLite 的第一步是选择要转换和使用的模型。

    2.4K20

    当微信小程序遇上TensorFlow:接收base64编码图像数据

    这是当微信小程序遇上TensorFlow系列文章的第四篇文章,阅读本文,你将了解到: 如何查看tensorflow SavedModel的签名 如何加载tensorflow SavedModel 如何修改现有的...我的理解是类似于编程语言中模块的输入输出信息,比如函数名,输入参数类型,输出参数类型等等。...SignatureDef contains the following input(s): inputs['image'] tensor_info: dtype: DT_FLOAT...shape: (-1, 299, 299, 3) name: Placeholder:0 The given SavedModel SignatureDef contains...到目前为止,关键的问题已经都解决,接下来就需要继续完善微信小程序的展现,以及如何提供识别率,敬请关注我的微信公众号:云水木石,获取最新动态。

    1K50

    keras .h5转移动端的.tflite文件实现方式

    一般有这几种保存形式: 1、Checkpoints 2、HDF5 3、SavedModel等 保存与读取CheckPoint 当模型训练结束,可以用以下代码把权重保存成checkpoint格式 model.save_weights...= converter.convert() open("newModel.tflite", "wb").write(tflite_model) 看到生成的tflite文件表示保存成功了 也可以这么查看...tflite网络的输入输出 import numpy as np import tensorflow as tf # Load TFLite model and allocate tensors. interpreter...interpreter.get_input_details() output_details = interpreter.get_output_details() print(input_details) print(output_details) 输出了以下信息...array([ 1, 12544, 2]), ‘dtype’: <class ‘numpy.float32’ , ‘quantization’: (0.0, 0)}] 两个shape分别表示输入输出

    2.9K20

    【云+社区年度征文】TinyML实践-2:How TinyML Works?

    此外,TFLite也不支持一些使用次数比较少的算子。 作为这些折中的回报,TFLite可以只用几百字节,从而使其更适合大小受到限制的应用程序。...简单的说,TFLite与TF最大的不同,它只关注推断。 TF-Lite for Microcontroller是TFLite在mcu移植的版本(子系统),复用TF-Lite的框架。...1.Tensorflow-lite框架 架构&组件 TFLite architecture [tflite architecture.png] TFLite的组件构成 [components in tensorflow...[parameters for convrsion.png] 官方推荐使用SavedModel,个人认为SavedModel是机器学习部署应用生产环境的规范产物,有一堆的工具链可以利用。...从广义上讲,剪枝试图去除对输出预测没有多大用处的神经元。这通常与较小的神经权重相关联,而较大的权重由于在推理过程中的重要性而保持不变。然后在修剪后的体系结构上重新训练网络,以微调输出

    1.8K52

    跨越重重“障碍”,我从 PyTorch 转换为了 TensorFlow Lite

    测 试 为了测试转换后的模型,我生成了一组大约 1000 个输入张量,并为每个模型计算了 PyTorch 模型的输出。...这个集合后来被用来测试每个转换后的模型,方法是通过一个平均误差度量,在整个集合中将它们的输出与原始输出进行比较。...在相同的输入下,平均误差反映了在相同的输入下,转换后的模型输出与原始 PyTorch 模型输出相比有多大的不同。 我决定将平均误差小于 1e-6 的模型视为成功转换的模型。...据我所知,TensorFlow 提供了 3 种方法来将 TF 转换为 TFLiteSavedModel、Keras 和具体函数。..., 'wb') as f: f.write(tf_lite_model) TF 冻结图到 TFLite你可能会认为,在经历了所有这些麻烦之后,在新创建的tflite模型上运行 推理 可以平静地进行。

    1.6K20

    如何将自己开发的模型转换为TensorFlow Lite可用模型

    (另外一个好处是,如果您共享模型而没有共享训练脚本,开发人员可以研究模型并快速识别图形的输入输出)。 我开始猜想Logit层是输出层,但那不是我们想要获得推断结果的层。...在TensorFlow格式之间转换: github文档中,对GraphDef(.pb)、FrozenGraphDef(带有冻结变量的.pb)、SavedModel(.pb - 用于推断服务器端的通用格式...用它在每一步评估图形,识别不支持的图层,并找出输入和输出形状。...在更复杂的模型中,您可能会遇到TFLite不支持的操作,因此了解它们是哪些操作并查看是否可以使用graph_transform工具进行操作,也是很好的。 为输入和输出层命名。...如果能自动获取SavedGraph并将其转换(缩减中间的一堆步骤)会很棒,但我们还没有做到。

    3K41

    动态 | TensorFlow 2.0 新特性来啦,部分模型、库和 API 已经可以使用

    导出到 SavedModel。...TensorFlow 将在 SavedModel 上作为 TensorFlow 服务、TensorFlow Lite、TensorFlow.js、TensorFlow Hub 等的交换格式进行标准化。...TensorFlow Lite(https://www.tensorflow.org/mobile/tflite/):TensorFlow 针对移动和嵌入式设备的轻量级解决方案提供了在 Android、...包含了许多功能,可以在不牺牲速度或性能的情况下定义和训练最先进的模型: Keras 功能 API 和 Model Subclassing API:允许创建复杂的拓扑结构,包括使用剩余层、自定义多输入/输出模型和前向迭代...此外,SavedModel 和 GraphDef 将向后兼容。用 1.x 版本保存的 SavedModel 格式的模型将继续在 2.x 版本中加载和执行。

    1.1K40

    【技术分享】深入了解tensorflow模型存储格式

    3.1 区别 先看一下二者的区别,saved_model.pb的protobuf定义是SavedModel,如下所示 message SavedModel { int64 saved_model_schema_version...去看tensorflow的提交历史也能发现SavedModel和signature_def是在同一次提交中加入到tensorflow项目中的。...指定存取相关的节点和参数 map collection_def = 4; // 定义了可训练的节点集合、要保存的节点集合 map<string, SignatureDef...其实可以看到每个节点的输出都是一个list,虽然大部分节点的输出的list都只有一个元素,但也有少量节点会输出两个以上的元素,比如分支操作cond/Switch。...size: -1 } dim { size: 100 } } } } method_name: "default" } } 有了上面的信息,tfserving加载模型的时候就知道了在收到的请求中获取

    3K30
    领券