【问题标题】:Tensorflow and Tensorflow.JS giving different predictionsTensorflow 和 Tensorflow.JS 给出不同的预测
【发布时间】:2020-08-22 17:50:48
【问题描述】:

我在 Tensorflow 中训练了一个模型并将模型转换为 Tensorflow.js。我的模型基于 mobilenet v2,其中一些最终层被移除并替换为反卷积层。

转换后,即使使用相同的数据,我的模型与 Python TF 模型的预测也不同。

我在转换过程中注意到以下警告:

WARNING:tensorflow:Didn't find expected Conv2D or DepthwiseConv2dNative input to 'StatefulPartitionedCall/bremont_mobilenetv2_0.75/batch_normalization/FusedBatchNormV3'
WARNING:tensorflow:Didn't find expected Conv2D or DepthwiseConv2dNative input to 'StatefulPartitionedCall/bremont_mobilenetv2_0.75/batch_normalization_1/FusedBatchNormV3'
WARNING:tensorflow:Didn't find expected Conv2D or DepthwiseConv2dNative input to 'StatefulPartitionedCall/bremont_mobilenetv2_0.75/batch_normalization_2/FusedBatchNormV3'

完整的转换日志是:

tensorflowjs_converter --input_format tf_saved_model \
                       ../models/keras_saved_model/pose_mobilenet_v2_075/1/ \
                       ../models/tfjs/pose_mobilenet_v2_075/1

2020-08-22 16:23:06.107303: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
2020-08-22 16:23:08.772664: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library 'libcuda.so.1'; dlerror: libcuda.so.1: cannot open shared object file: No such file or directory
2020-08-22 16:23:08.772794: W tensorflow/stream_executor/cuda/cuda_driver.cc:312] failed call to cuInit: UNKNOWN ERROR (303)
2020-08-22 16:23:08.772929: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:156] kernel driver does not appear to be running on this host (c316cecfe6ff): /proc/driver/nvidia/version does not exist
2020-08-22 16:23:08.773528: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN)to use the following CPU instructions in performance-critical operations:  AVX2 FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2020-08-22 16:23:08.795662: I tensorflow/core/platform/profile_utils/cpu_utils.cc:104] CPU Frequency: 2304000000 Hz
2020-08-22 16:23:08.796681: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x556c9c823e90 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-08-22 16:23:08.796749: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
2020-08-22 16:23:18.570250: I tensorflow/core/grappler/devices.cc:69] Number of eligible GPUs (core count >= 8, compute capability >= 0.0): 0
2020-08-22 16:23:18.571471: I tensorflow/core/grappler/clusters/single_machine.cc:356] Starting new session
2020-08-22 16:23:18.650737: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:816] Optimization results for grappler item: graph_to_optimize
2020-08-22 16:23:18.650819: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   function_optimizer: Graph size after: 1062 nodes (787), 1040 edges (765), time = 33.855ms.
2020-08-22 16:23:18.650841: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   function_optimizer: function_optimizer did nothing. time = 0.605ms.
2020-08-22 16:23:20.298407: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:816] Optimization results for grappler item: graph_to_optimize
2020-08-22 16:23:20.298481: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   debug_stripper: debug_stripper did nothing. time = 0.831ms.
2020-08-22 16:23:20.298502: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   model_pruner: Graph size after: 468 nodes (-548), 480 edges (-548), time = 5.86ms.
2020-08-22 16:23:20.298519: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   constant_folding: Graph size after: 468 nodes (0), 480 edges (0), time = 32.234ms.
2020-08-22 16:23:20.298533: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   arithmetic_optimizer: Graph size after: 468 nodes (0), 480 edges (0), time = 27.212ms.
2020-08-22 16:23:20.298565: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   dependency_optimizer: Graph size after: 468 nodes (0), 480 edges (0), time = 5.536ms.
2020-08-22 16:23:20.298604: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   model_pruner: Graph size after: 468 nodes (0), 480 edges (0), time = 3.384ms.
2020-08-22 16:23:20.298621: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   constant_folding: Graph size after: 468 nodes (0), 480 edges (0), time = 14.581ms.
2020-08-22 16:23:20.298641: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   arithmetic_optimizer: Graph size after: 468 nodes (0), 480 edges (0), time = 37.403ms.
2020-08-22 16:23:20.298656: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   dependency_optimizer: Graph size after: 468 nodes (0), 480 edges (0), time = 6.571ms.
2020-08-22 16:23:20.298672: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   debug_stripper: debug_stripper did nothing. time = 0.547ms.
2020-08-22 16:23:20.298713: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   model_pruner: Graph size after: 468 nodes (0), 480 edges (0), time = 2.079ms.
2020-08-22 16:23:20.298733: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   constant_folding: Graph size after: 468 nodes (0), 480 edges (0), time = 23.091ms.
2020-08-22 16:23:20.298794: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   arithmetic_optimizer: Graph size after: 468 nodes (0), 480 edges (0), time = 23.129ms.
2020-08-22 16:23:20.298812: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   dependency_optimizer: Graph size after: 468 nodes (0), 480 edges (0), time = 4.498ms.
2020-08-22 16:23:20.298825: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   model_pruner: Graph size after: 468 nodes (0), 480 edges (0), time = 2.181ms.
2020-08-22 16:23:20.298833: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   constant_folding: Graph size after: 468 nodes (0), 480 edges (0), time = 22.593ms.
2020-08-22 16:23:20.298845: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   arithmetic_optimizer: Graph size after: 468 nodes (0), 480 edges (0), time = 21.459ms.
2020-08-22 16:23:20.298853: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   dependency_optimizer: Graph size after: 468 nodes (0), 480 edges (0), time = 4.195ms.
WARNING:tensorflow:Didn't find expected Conv2D or DepthwiseConv2dNative input to 'StatefulPartitionedCall/bremont_mobilenetv2_0.75/batch_normalization/FusedBatchNormV3'
WARNING:tensorflow:Didn't find expected Conv2D or DepthwiseConv2dNative input to 'StatefulPartitionedCall/bremont_mobilenetv2_0.75/batch_normalization_1/FusedBatchNormV3'
WARNING:tensorflow:Didn't find expected Conv2D or DepthwiseConv2dNative input to 'StatefulPartitionedCall/bremont_mobilenetv2_0.75/batch_normalization_2/FusedBatchNormV3'
2020-08-22 16:23:25.023423: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:816] Optimization results for grappler item: graph_to_optimize
2020-08-22 16:23:25.023493: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   remapper: Graph size after: 488 nodes (-31), 299 edges (-28), time = 18.115ms.
2020-08-22 16:23:25.023513: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   constant_folding: Graph size after: 260 nodes (-228), 272 edges (-27), time = 25.169ms.
2020-08-22 16:23:25.023532: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   arithmetic_optimizer: Graph size after: 260 nodes (0), 272 edges (0), time = 6.566ms.
2020-08-22 16:23:25.023552: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   dependency_optimizer: Graph size after: 260 nodes (0), 272 edges (0), time = 2.274ms.
2020-08-22 16:23:25.023591: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   remapper: Graph size after: 260 nodes (0), 272 edges (0), time = 1.215ms.
2020-08-22 16:23:25.023668: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   constant_folding: Graph size after: 260 nodes (0), 272 edges (0), time = 6.636ms.
2020-08-22 16:23:25.023740: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   arithmetic_optimizer: Graph size after: 260 nodes (0), 272 edges (0), time = 6.141ms.
2020-08-22 16:23:25.023838: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:818]   dependency_optimizer: Graph size after: 260 nodes (0), 272 edges (0), time = 2.42ms.
Writing weight file ../models/tfjs/pose_mobilenet_v2_075/1/model.json...

举一个输出的例子,这是来自 Python:

output[0,0,0]
    
array([ 0.00079024, -0.0020999 ,  0.00075853, -0.00058321,  0.00695629,
            0.00209076,  0.00031798, -0.00092323, -0.00198799, -0.0020462 ,
            0.00417227], dtype=float32)

来自 tensorflow.js 的相同输入数据:

r.arraySync()[0][0][0]

[
  0.0010096959304064512,
  -0.0024646464735269547,
  0.0010527926497161388,
  0.0008166381157934666,
  0.005697209388017654,
  0.0010445881634950638,
  0.0010996845085173845,
  -0.0013098083436489105,
  -0.0022477181628346443,
  -0.002731590997427702,
  0.003211272181943059
]

我已将相关模型创建和转换代码复制到此 repo https://github.com/markstrefford/tf-to-tfjs

环顾四周,这个问题的大部分实例似乎是由于早期版本的 tf.js,但我正在运行最新版本的 Tensorflow (2.3)、Tensorflow JS 转换器 (2.3) 和 Tensorflow.js (2.0 .1)。我也尝试过 tf-node.js(2.3 版),但仍然遇到同样的问题。

【问题讨论】:

    标签: python tensorflow tensorflow.js


    【解决方案1】:

    好的,所以在与 tf.js 人员的讨论中,这些输出差异是意料之中的,并且警告似乎没有对我的模型准确性造成任何问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 2019-05-05
      • 1970-01-01
      相关资源
      最近更新 更多