系统信息
- 我是否编写了自定义代码(而不是使用TensorFlow中提供的常用示例脚本):没有
- 操作系统平台和分发版(例如Linux Ubuntu 16.04):Ubuntu 18.04版
- 移动的设备(例如iPhone 8、Pixel 2、Samsung Galaxy),如果问题发生在移动设备上:不适用
- TensorFlow安装自(源代码或二进制文件):来源
- TensorFlow版本(使用下面的命令):2.3.1
- Python版本:3.6.9
- Bazel版本(如果从源代码编译):3.4.1
- GCC/编译器版本(如果从源代码编译):Ubuntu 7.5.0- 3Ubuntu 1 ~18.04版本
- CUDA/cuDNN版本:不适用
- GPU型号和内存:不适用
描述当前行为
s390 x上的测试用例//tensorflow/lite/micro/examples/hello_world:hello_world_test
失败,错误为:
Testing LoadModelAndPerformInference
0. (1.0*2^-127) near value (-1.1018541*2^0) failed at tensorflow/lite/micro/examples/hello_world/hello_world_test.cc:103
0.841 (1.6819992*2^-1) near value (-1.1018541*2^0) failed at tensorflow/lite/micro/examples/hello_world/hello_world_test.cc:111
0.141 (1.1279996*2^-3) near value (-1.1018541*2^0) failed at tensorflow/lite/micro/examples/hello_world/hello_world_test.cc:118
-0.959 (-1.9179993*2^-1) near value (-1.1018541*2^0) failed at tensorflow/lite/micro/examples/hello_world/hello_world_test.cc:125
0/1 tests passed
~~~SOME TESTS FAILED~~~
在调试时,我发现GetTensorData<int32_t>(bias)
返回LE格式的Tensor数据,其中bias是一个可选输入Tensor,在Eval
中填充为const TfLiteTensor* bias = GetOptionalInputTensor(context, node, kBiasTensor);
在计算acc
时,在reference_integer_ops FullyConnected中使用偏差的Tensor数据。
我尝试了一个解决方案,在填充acc
时对这些数据进行字节交换,这样就修复了测试用例。
if (bias_data) {
# if FLATBUFFERS_LITTLEENDIAN
acc += bias_data[out_c];
# else
acc += __bswap_32(bias_data[out_c]);
# endif
在完全连接的. h中
由于我不了解这个可选Tensor的范围和使用,您是否可以建议我尝试其他方法,或者我是否应该PR这个解决方案?
描述预期行为
BE系统上的Tensor数据必须采用正确的格式,测试用例应通过。
重现问题的独立代码
要重现此问题,请运行此测试用例:
bazel --host_jvm_args="-Xms1024m" --host_jvm_args="-Xmx2048m" test --host_javabase="@local_jdk//:jdk" --test_tag_filters=-gpu,-benchmark-test,-v1only,-no_oss,-oss_serial -k --test_timeout 300,450,1200,3600 --build_tests_only -c dbg --copt=-O -c opt --copt=-g --strip never --color=yes --curses=yes --test_output=errors --verbose_failures -- //tensorflow/lite/micro/examples/hello_world:hello_world_test
其他信息/日志
5条答案
按热度按时间1yjd4xko1#
我发现
micro_speech_binary_mock_test
和micro_speech_test
测试用例也需要类似的修复才能在s390x上通过。需要在depthwise_conv. h中进行更改。这里也需要在填充acc
之前对偏置数据进行字节交换。3ks5zfa02#
你好@advaitjain,只是在这里发布更新..
在Tensorflow发布版本2.4.1中,此解决方案导致回归到
//tensorflow/lite/micro/kernels:fully_connected_test
,同样,depthwise_conv.h
中的修复导致//tensorflow/lite/micro/kernels:depthwise_conv_test
测试用例失败。看起来这些测试要求
bias_data
为Little Endian格式,并相应地处理数据,而对于hello_world_test
和micro_speech_tests,bias_data
在计算中使用时假定其为BE格式,因此,它会扰乱acc
的计算。xlpyo6sf3#
社区对此问题有任何更新吗?谢谢!
toe950274#
你好@advaitjain,希望一切顺利。
想知道你是否有任何更新注册这一问题?谢谢!
csga3l585#
由于测试用例
//tensorflow/lite/micro/examples/hello_world:hello_world_test
已移出tensorflow/tensorflow存储库,因此可以关闭此问题。