簡體   English   中英

如何在 TensorflowJS 中保存 Model 圖像分類器

[英]How To Save Model image classifier in TensorflowJS

我在瀏覽器中用 TensorFlow.js 創建了一個圖像分類器,代碼運行良好,但是當頁面重新加載時,代碼需要再次訓練數據(需要時間),所以我不想再次訓練數據,我想保存 model 並加載它們。 我正在嘗試使用此代碼保存 model

  await model.save('anime/saved-model');

但它不起作用,順便說一句,這是我的代碼

HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Jotaro atau Giorno</title>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs/dist/tf.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/mobilenet"></script>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/knn-classifier"></script>
<script src="https://code.jquery.com/jquery-3.5.1.js" integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc=" crossorigin="anonymous"></script>
</head>
<body>
<h1>Test Image Giorno and Jotaro</h1>
<input type='file' onchange="readURL(this);" />
<img id="image_baru"  src="#" alt="your image" />
<button id="tombolPrediksi">Prediksi</button>
<h3>output in the console</h3>
</body>
</html>

Javascript

 let mobileneModule;
 let ClassifierKNN;

 function readURL(input) {
  if (input.files && input.files[0]) {
    var reader = new FileReader();
    reader.onload = function (e) {
      $('#image_baru')
      .attr('src', e.target.result)
      .width(300)
      .height(300);};
    reader.readAsDataURL(input.files[0]);}
    }

 const initScript = async function(){
  ClassifierKNN = knnClassifier.create();
  mobileneModule = await mobilenet.load();
    
    const jotaroExample = ()=>{
      for(let i=1; i<=3;i++){
      const im = new Image(300,300);
      im.src = 'anime/jotaro/'+i+'.jpg';
      im.onload = ()=>{
      let trainingImageJotaro = tf.browser.fromPixels(im);
      let predJotaro = mobileneModule.infer(trainingImageJotaro,'conv_preds');
      ClassifierKNN.addExample(predJotaro,"Jotaro Kujo");
      console.log("Giorno ok")
      }
      im.onload();
    }}

    const giornoExample = ()=>{
      for(let i=1; i<=3;i++){
      const im2 = new Image(300,300);
      im2.src = 'anime/giorno/'+i+'.jpg';
      im2.onload = ()=>{
      let trainingImageGiorno = tf.browser.fromPixels(im2);
      let predGiorno = mobileneModule.infer(trainingImageGiorno,'conv_preds');
      ClassifierKNN.addExample(predGiorno,"Giorno Giovanna");
      console.log("Giorno Oke")
    }
    im2.onload();
    }}

    await jotaroExample();
    await giornoExample();
    //save model
    await model.save('anime/saved-model');
    }

    initScript();

    const prediksiGambar = async function(){
      let imgX = document.getElementById('image_baru');
      const tensorX = tf.browser.fromPixels(imgX);
      const logitsX = mobileneModule.infer(tensorX,'conv_preds');
      let result = await ClassifierKNN.predictClass(logitsX);
      console.log('hasil prediksi:');
      console.log(result);
    }
     document.getElementById("tombolPrediksi").addEventListener("click",prediksiGambar);

我希望有一個人可以幫助我:)

  1. 用於保存到本地設備並生成 2 個文件,model.json 文件和一個帶有權重的二進制文件。
await model.save('downloads://my-model');
  1. 用於將模型保存在瀏覽器本地存儲中,即使頁面刷新也會保留。 但請注意,每個瀏覽器對其可以存儲的數量都有限制。
// saves under the my-model in the browsers storage 
await model.save('localstorage://my-model');

文檔中的更多信息

看這里

// Create your classifier:
let classifier = knnClassifier.create();
// Add some examples:
classifier.addExample(...);
// Save it to a string:
let str = JSON.stringify(Object.entries(classifier.getClassifierDataset()).map(([label, data])=>[label, Array.from(data.dataSync()), data.shape]) );
// Load it back into a fresh classifier:
classifier = knnClassifier.create();
classifier.setClassifierDataset( Object.fromEntries( JSON.parse(str).map(([label, data, shape])=>[label, tf.tensor(data, shape)]) ) );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM