使用 tensorflow.js 打印预测时出现问题
Problems printing predictions using tensorflow.js
我已经使用 make_image_classifier command line tool to retrain the model and the tfjs-converter 重新训练了一个 mobilenet_v2 模型,为浏览器准备模型。
make_image_classifier \
--image_dir image_data \
--tfhub_module https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/4 \
--saved_model_dir trained_models/1 \
--labels_output_file class_labels.txt \
--tflite_output_file trained_model.tflite
tensorflowjs_converter \
--input_format=tf_saved_model \
--output_format=tfjs_graph_model \
--signature_name=serving_default \
--saved_model_tags=serve \
./trained_models/1 \
./web_model
为了测试 TF Lite 模型,我使用了 tflite example code。
我遵循了工具的说明,因此使用了提供的代码。
如果我现在尝试在浏览器中预测图像,我不会得到预期的输出。看起来只有概率在没有标签的情况下被打印出来。
const MODEL_URL = 'model/model.json';
const model = await tf.loadGraphModel(MODEL_URL);
var canvas = document.getElementById("canvas").getContext("2d");;
const img = canvas.getImageData(0,0, 224,224)
const tfImg = tf.browser.fromPixels(img).expandDims(0);
const smalImg = tf.image.resizeBilinear(tfImg, [224, 224]);
let result = await model.predict(smalImg);
console.log(result.print())
输出:张量
[[0.0022475, 0.0040588, 0.0220788, 0.0032885, 0.000126, 0.0030831, 0.8462179, 0.1188994],]
使用 python 测试模型效果很好,我得到了带有标签和概率的预期输出。我做错了什么吗?
在 python 代码中,预测后有以下内容:
# output_data is the predition result
results = np.squeeze(output_data)
top_k = results.argsort()[-5:][::-1]
labels = load_labels(args.label_file)
for i in top_k:
if floating_model:
print('{:08.6f}: {}'.format(float(results[i]), labels[i]))
else:
print('{:08.6f}: {}'.format(float(results[i] / 255.0), labels[i]))
在js中预测后需要做同样的处理。 labels
的数组包含数据集的所有标签。它需要在 js 中加载,因为它是在 labels.txt
文件的 python 代码中加载的。
const topkIndices = result.topk(5)
const topkIndices = await topk.indices.data();
const categories = (Array.from(topkIndices)).map((p: number) => labels[p]);
const topkValues = await topk.values.data()
const data = Array.from(topkValues).map(p => p * 100);
// categories will contain the top5 labels and
// data will contain their corresponding probabilities
我已经使用 make_image_classifier command line tool to retrain the model and the tfjs-converter 重新训练了一个 mobilenet_v2 模型,为浏览器准备模型。
make_image_classifier \
--image_dir image_data \
--tfhub_module https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/4 \
--saved_model_dir trained_models/1 \
--labels_output_file class_labels.txt \
--tflite_output_file trained_model.tflite
tensorflowjs_converter \
--input_format=tf_saved_model \
--output_format=tfjs_graph_model \
--signature_name=serving_default \
--saved_model_tags=serve \
./trained_models/1 \
./web_model
为了测试 TF Lite 模型,我使用了 tflite example code。 我遵循了工具的说明,因此使用了提供的代码。
如果我现在尝试在浏览器中预测图像,我不会得到预期的输出。看起来只有概率在没有标签的情况下被打印出来。
const MODEL_URL = 'model/model.json';
const model = await tf.loadGraphModel(MODEL_URL);
var canvas = document.getElementById("canvas").getContext("2d");;
const img = canvas.getImageData(0,0, 224,224)
const tfImg = tf.browser.fromPixels(img).expandDims(0);
const smalImg = tf.image.resizeBilinear(tfImg, [224, 224]);
let result = await model.predict(smalImg);
console.log(result.print())
输出:张量 [[0.0022475, 0.0040588, 0.0220788, 0.0032885, 0.000126, 0.0030831, 0.8462179, 0.1188994],]
使用 python 测试模型效果很好,我得到了带有标签和概率的预期输出。我做错了什么吗?
在 python 代码中,预测后有以下内容:
# output_data is the predition result
results = np.squeeze(output_data)
top_k = results.argsort()[-5:][::-1]
labels = load_labels(args.label_file)
for i in top_k:
if floating_model:
print('{:08.6f}: {}'.format(float(results[i]), labels[i]))
else:
print('{:08.6f}: {}'.format(float(results[i] / 255.0), labels[i]))
在js中预测后需要做同样的处理。 labels
的数组包含数据集的所有标签。它需要在 js 中加载,因为它是在 labels.txt
文件的 python 代码中加载的。
const topkIndices = result.topk(5)
const topkIndices = await topk.indices.data();
const categories = (Array.from(topkIndices)).map((p: number) => labels[p]);
const topkValues = await topk.values.data()
const data = Array.from(topkValues).map(p => p * 100);
// categories will contain the top5 labels and
// data will contain their corresponding probabilities