【发布时间】: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