tensorflow lite推断得到的结果与常规推理不同

时间:2018-03-28 13:06:45

标签: tensorflow tensorflow-lite

我有一个从图像中提取512个特征的模型(数字在-1,1之间)。 我使用这里的指令将此模型转换为tflite float格式 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 --input_file = / tmp / network_512.pb    --input_format = TENSORFLOW_GRAPHDEF --output_format = TFLITE --output_file = / tmp / tffiles / network_512.tflite    --inference_type = FLOAT --input_type = FLOAT --input_arrays = input --output_arrays = embeddings --input_shapes = 1,128,128,1

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

1 个答案:

答案 0 :(得分:0)

我找到的更新。我做的测试是使用Demo app tensorflow提供并更改它以使用我的服装模型和提取功能,在那里我注意到功能值的差异。

一旦我在最新的android上手动编译了tf-lite c ++ lib,并使用我使用的相同流程运行流程(直到现在为TF-C API)我得到的功能几乎相同。

没有时间调查差异的来源。但我现在很开心