将学习转移到Tensorflow.js:需要一种热编码吗?

时间:2020-07-31 17:11:42

标签: tensorflow tensorflow.js

我使用以下公式创建了自己的Tensorflow图像分类模型:

make_image_classifier \
  --image_dir my_image_dir \
  --tfhub_module https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/4 \
  --image_size 224 \
  --saved_model_dir my_dir/new_model \
  --labels_output_file class_labels.txt 

遵循this教程。在此过程中,该工具会识别我的三个自定义类并将其保存到文本文件中。该模型的准确性为0.99-1.00。

我还通过遵循以下公式成功地将saved_model.pb转换为Tensorflow.js:

tensorflowjs_converter \
    --input_format=tf_saved_model \
    --output_format=tfjs_graph_model \
    --signature_name=serving_default \
    --saved_model_tags=serve \
    /mobilenet/saved_model \
    /mobilenet/web_model

但是,我仍然以某种方式仍然感到我的课程在训练或预测过程中“丢失”。 在我的代码中,我通过将它们组成一个数组来检索我的标签(常量标签= [“动物”,“手”,“怪物”]);并计算argMax。但是,我仍然不确定当我得到不准确的结果时它们是否正确映射。现在只有我来决定数组的顺序,我想知道我是否按正确的顺序放置标签。我已经阅读了一些热编码的内容,我想知道这是否是我所缺少的步骤?因此,我的主要问题是:

  1. 例如,如何确定最高可信度0.64确实表示“手”类而不是“动物”类,因为它们只是命令行工具中的图像文件夹?

  2. 如果这不是访问正确标签的正确方法,那会是什么?制作标签的json是否有帮助-我想知道dataSync()是否还希望如此?

对于新手的错误/条款,我们深表歉意。我在此处粘贴相关的预测代码:

const model = await tf.loadGraphModel(MODEL_URL);
  console.log('Successfully loaded model');
  const labels = ["animals", "hand", "monsters"];

  console.log(labels);

--

const img = await webcam.capture();
    const smalImg = tf.image.resizeBilinear(img, [224, 224]);
    const resized = tf.cast(smalImg, 'float32');

    const t4d = tf.tensor4d(Array.from(resized.dataSync()),[1,224,224,3]);


    const result = await model.predict(t4d); 

    result.print(); 
    result.as1D().argMax().print(); 
    const labelIndex = result.as1D().argMax(); 
    const predictionLabel = result.as1D().argMax().dataSync()[0];
    const predict = await result.data();
    const value = predict[predictionLabel]; 


   document.getElementById("demo").innerHTML = `
   I can see a: ${labels[predictionLabel]}\n
   Confidence is: ${value}\n
 `;

0 个答案:

没有答案