当前位置: 首页 > 知识库问答 >
问题:

TesorFlow Lite推理给出不同的结果然后规则推理

包子航
2023-03-14

我有一个模型,可以从图像中提取512个特征(数字介于-1,1之间)。我使用此处的说明将此模型转换为tflite浮点格式https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite

我对原始模型和tflite模型的同一个图像进行了推断。

对于向量,我得到了不同的结果,我希望得到非常相似的结果,因为我没有使用量化格式。据我所知,tf-lite应该只提高推理性能,而不影响特征计算。

我的问题是这正常吗?还有其他人遇到过这种情况吗?我在任何地方都没有找到与此相关的主题。

代码更新。

我有这个网络我训练(删除了许多项目,因为我不能共享完整的网络)占位符=tf.placeholder(名称='输入',dtype=tf.float32,形状=[无,128,128,1])

with slim.arg_scope([slim.conv2d, slim.separable_conv2d],
                      activation_fn=tf.nn.relu, normalizer_fn=slim.batch_norm):
    net = tf.identity(placeholder)
    net = slim.conv2d(net, 32, [3, 3], scope='conv11')
    net = slim.separable_conv2d(net, 64, [3, 3], scope='conv12')
    net = slim.max_pool2d(net, [2, 2], scope='pool1')  # 64x64

    net = slim.separable_conv2d(net, 128, [3, 3], scope='conv21')
    net = slim.max_pool2d(net, [2, 2], scope='pool2')  # 32x32
    net = slim.separable_conv2d(net, 256, [3, 3], scope='conv31')

    net = slim.max_pool2d(net, [2, 2], scope='pool3')  # 16x16
    net = slim.separable_conv2d(net, 512, [3, 3], scope='conv41')
    net = slim.max_pool2d(net, [2, 2], scope='pool4')  # 8x8
    net = slim.separable_conv2d(net, 1024, [3, 3], scope='conv51')
    net = slim.avg_pool2d(net, [8, 8], scope='pool5')  # 1x1
    net = slim.dropout(net)
    net = slim.conv2d(net, feature_vector_size, [1, 1], activation_fn=None, normalizer_fn=None, scope='features')
    embeddings = tf.nn.l2_normalize(net, 3, 1e-10, name='embeddings') 

bazel-bin/tensorflow/contrib/lite/toco/toco--input\u file=/tmp/network\u 512。pb——输入格式=TENSORFLOW\u图形DEF——输出格式=TFLITE——输出文件=/tmp/tffiles/network\u 512。tflite--推断类型=浮点--输入类型=浮点--输入数组=输入--输出html" target="_blank">数组=嵌入--输入形状=1128128,1

我运行network_512.pb在python和network_512.tflite使用代码从https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite/java/demo我修改了代码加载我的网络和运行它。

共有1个答案

谷出野
2023-03-14

我所做的测试是使用Demo应用程序Tenorflow提供并更改它以使用我的服装模型和提取功能,在那里我注意到功能值的差异。

一旦我在最新的android上手动编译了tf-lite c库,并使用我使用的相同流(到目前为止都是tf-CAPI)运行该流,我就得到了几乎相同的功能结果。

我没有时间去调查差异从何而来。但是我现在很开心。

 类似资料:
  • 阿姆斯特朗的公理是基本的推理规则。 阿姆斯特朗的公理用于结束关系数据库的函数依赖。 推理规则是一种断言。 它可以应用于一组FD(函数依赖)以导出其他FD(函数依赖)。 使用推理规则,可以从初始集中导出额外的函数依赖。 函数依赖有种类型的推理规则: 1. 自反规则(IR1) 在反身规则中,如果是的子集,则确定。 示例 2. 增强规则(IR2) 增强也称为部分依赖。在增强中,如果确定,则确定任何。 示

  • 本文向大家介绍谓词演算的推理规则,包括了谓词演算的推理规则的使用技巧和注意事项,需要的朋友参考一下 为了从我们已经知道其真实性的陈述中推断出新的陈述,使用了推理规则。 推理规则有什么用? 数学逻辑通常用于逻辑证明。证明是确定数学陈述的真值的有效参数。 参数是一系列语句。最后一个陈述是结论,其前面的所有陈述都称为前提(或假设)。结论之前放置符号“∴”(因此请阅读)。一个有效的论点是根据前提的真实值得

  • null 我使用的是Protege 5.0.0、Reasoner Hermit 1.3.8和OWL API 5.0.5(尽管不同的Reasoner获得了相同的结果:Fact++、Pellet;以及不同的OWL API和Protege版本:4.x) 我会很高兴有任何评论,即使是一个简单的解释也会对我有很大帮助。

  • 假设OWL本体论包含以下SWRL规则: 和以下对象属性断言: 当我运行的隐士推理器中的蛋白质,我得到以下推断对象属性断言: 然而,当我用owlready2加载同一个本体并运行它的hermitreasoner时,我没有得到任何推断的对象属性断言。例如: 不返回任何属性。 我确实以RDFXML格式保存了本体,并且可以使用owlready2检索SWRL规则。 owlready2推理器不支持这种推论吗?

  • 问题内容: 当我运行此代码时: 我在Eclipse的JUnit运行程序中得到以下结果: 这导致从命令行Maven: 如您所见,时间有所不同。 (同一台计算机,相同的Java版本,可能相隔30秒)。为什么? [编辑] 时区也不同。从Maven 启动和从Eclipse 启动时,为什么要使用Java ? 或换一种说法:如何强制Java使用两者? 问题答案: 要指定默认时区,您可以设置系统属性。您可以通过

  • 我在Cplex中使用Python API来解决一个线性编程问题。使用Cplex时,我的结果如下: 但随后我将LP prolem保存为LP文件,并再次使用Cplex进行求解,结果与第一个略有不同: 下面是我的功能: