当我将一个冷冻的PB模型转换为一个tensorflow JS模型时,我将所有的准确性与预测相结合。谁能告诉我为什么以及我做错了什么?
我做了以下事情 - 我用我自己的数据集重新训练了ImageNet模型,如下所述:https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/#0
当我运行以下命令时,我可以使用冻结模型获得准确的结果:
python3 -m scripts.label_image \
--graph=tf_files/retrained_graph.pb \
--image=/mnt/c//Users/Harry/Pictures/220px-Afghane.jpg
它给出的跟随输出是现货:
afghan hound (score=0.98313)
briard (score=0.00433)
lhasa (score=0.00401)
sussex spaniel (score=0.00346)
otterhound (score=0.00116)
我使用tensorflow JS转换器使用以下命令将我的冻结模型转换为Tensorflow JS:
tensorflowjs_converter \
--input_format=tf_frozen_model \
--output_node_names='final_result' \
'C:/Code/tensorflow-for-poets-2/tf_files/retrained_graph.pb' \
'C:/tensorflow output 2'
当我在tensorflow JS模型上使用与冻结模型相同的图像运行预测时,我得到了可怕的结果:
装货型号:
const MODEL_URL = 'assets/dog-model/tensorflowjs_model.pb';
const WEIGHTS_URL = 'assets/dog-model/weights_manifest.json';
loadFrozenModel(MODEL_URL, WEIGHTS_URL).then(
result => (this.model = result)
);
预测结果:
const image = tf.browser
.fromPixels(this.staticImage.nativeElement)
.resizeNearestNeighbor([224, 224])
.toFloat()
.sub(meanImageNetRGB)
.expandDims();
console.log(image);
const prediction = this.model.predict(image);
输出:
yorkshire terrier: 0.2447875738143921
komondor: 0.22793063521385193
ibizan hound: 0.0579879954457283
saluki: 0.04560968279838562
maltese dog: 0.04430125281214714
不准确性与模型的输入有关。确保用于创建表示两个版本(python和js)中的图像的张量的操作 - cropping
,reshaping
,...是相似的。