TensorFlow Lite 推断结果与常规推断结果不同

5
我有一个模型,可以从图像中提取512个特征(数值在-1到1之间)。我使用这里的指令将此模型转换为tflite浮点格式:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite 我对相同的图像运行了原始模型和tflite模型的推理。
向量的结果不同,我原本期望得到非常相似的结果,因为我没有使用量化格式。从我所了解的来看,tf-lite只应该提高推理性能时间,而不影响特征计算。
我的问题是,这种情况正常吗?有其他人遇到过这种情况吗?我在任何地方都没有找到相关的主题。
附更新的代码。
我训练了这个网络(由于无法分享完整网络,删除了许多项) placeholder = tf.placeholder(name='input', dtype=tf.float32,shape=[None, 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 命令的作用是:
将TensorFlow格式的网络模型(network_512.pb)转换为适用于移动设备的TensorFlow Lite格式的模型(network_512.tflite),其中设置了输入、输出类型和格式,输入数据形状等参数。

以下是需要翻译的内容:

我使用Python中的TensorFlow运行network_512.pb,并使用来自https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite/java/demo的代码运行network_512.tflite,我修改了该代码以加载并运行我的网络。


请提供最小的代码。 - ma3oun
@ma3oun更新了问题。但我不确定这有什么帮助,因为这个问题更多是一个普遍性的问题。 - Arkady Godlin
1个回答

0

我发现了一个更新。我使用TensorFlow提供的演示应用程序进行了测试,并将其更改为使用我的自定义模型并提取特征,然后我注意到了特征值之间的差异。

一旦我在最新的Android上手动编译了tf-lite c++库,并使用我一直使用的相同流程(即TF-C API),我得到了几乎相同的特征结果。

我没有时间去调查差异来自哪里。但我现在很高兴。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接