Web çalışanı kullanarak model eğitin,Web çalışanı kullanarak model eğitin

Bu öğreticide, bir Tekrarlayan Sinir Ağı'nı (RNN) tamsayı toplama işlemi yapmak üzere eğitmek için bir web çalışanı kullanan örnek bir web uygulamasını keşfedeceksiniz. Örnek uygulama, toplama operatörünü açıkça tanımlamıyor. Bunun yerine örnek toplamları kullanarak RNN'yi eğitir.

Elbette bu, iki tam sayıyı toplamanın en etkili yolu değil! Ancak eğitim, web ML'de önemli bir tekniği gösteriyor: UI mantığını yöneten ana iş parçacığını engellemeden uzun süreli hesaplamaların nasıl gerçekleştirileceği.

Bu eğitimin örnek uygulaması çevrimiçi olarak mevcuttur , dolayısıyla herhangi bir kod indirmenize veya bir geliştirme ortamı kurmanıza gerek yoktur. Kodu yerel olarak çalıştırmak istiyorsanız Örneği yerel olarak çalıştırma bölümündeki isteğe bağlı adımları tamamlayın. Bir geliştirme ortamı ayarlamak istemiyorsanız Örneği keşfetme bölümüne geçebilirsiniz.

Örnek kod GitHub'da mevcuttur.

(İsteğe bağlı) Örneği yerel olarak çalıştırın

Önkoşullar

Örnek uygulamayı yerel olarak çalıştırmak için geliştirme ortamınızda aşağıdakilerin yüklü olması gerekir:

Örnek uygulamayı yükleyin ve çalıştırın

  1. tfjs-examples deposunu klonlayın veya indirin.
  2. addition-rnn-webworker dizinine geçin:

    cd tfjs-examples/addition-rnn-webworker
    
  3. Bağımlılıkları yükleyin:

    yarn
    
  4. Geliştirme sunucusunu başlatın:

    yarn run watch
    

Örneği keşfedin

Örnek uygulamayı açın . (Ya da örneği yerel olarak çalıştırıyorsanız tarayıcınızda http://localhost:1234 adresine gidin.)

TensorFlow.js: Addition RNN başlıklı bir sayfa görmelisiniz. Uygulamayı denemek için talimatları izleyin.

Web formunu kullanarak, aşağıdakiler de dahil olmak üzere modeli eğitmek için kullanılan parametrelerden bazılarını güncelleyebilirsiniz:

  • Rakamlar : Koşullara eklenecek maksimum rakam sayısı.
  • Eğitim Boyutu : Oluşturulacak eğitim örneklerinin sayısı.
  • RNN Türü : SimpleRNN , GRU veya LSTM'den biri.
  • RNN Gizli Katman Boyutu : Çıkış alanının boyutluluğu (pozitif bir tam sayı olmalıdır).
  • Parti Boyutu : Gradyan güncellemesi başına örnek sayısı.
  • Eğitim Yinelemeleri : model.fit() çağırarak modeli eğitme sayısı
  • Test örneklerinin sayısı : Oluşturulacak örnek dizelerin sayısı (örneğin, 27+41 ).

Modeli farklı parametrelerle eğitmeyi deneyin ve çeşitli rakam kümeleri için tahminlerin doğruluğunu iyileştirip iyileştiremeyeceğinizi görün. Ayrıca model uyum süresinin farklı parametrelerden nasıl etkilendiğine dikkat edin.

Kodu keşfedin

Örnek uygulama, bir RNN'yi eğitmek için yapılandırabileceğiniz bazı parametreleri gösterir. Ayrıca ana iş parçacığından bir modeli eğitmek için bir web çalışanının kullanımını da gösterir. Web çalışanları, web ML'de önemlidir çünkü hesaplama açısından pahalı eğitim görevlerini bir arka plan iş parçacığında çalıştırmanıza olanak tanır ve böylece ana iş parçacığında kullanıcıyı etkileyebilecek potansiyel performans sorunlarından kaçınır. Ana ve çalışan iş parçacıkları birbirleriyle mesaj olayları aracılığıyla iletişim kurar.

Web çalışanları hakkında daha fazla bilgi edinmek için bkz. Web Çalışanları API'si ve Web Çalışanlarını Kullanma .

Örnek uygulamanın ana modülü index.js . index.js betiği, worker.js modülünü çalıştıran bir web çalışanı oluşturur :

const worker =
    new Worker(new URL('./worker.js', import.meta.url), {type: 'module'});

index.js büyük ölçüde form gönderimini yöneten, form verilerini işleyen, form verilerini çalışana ileten, çalışanın modeli eğitmesini ve sonuçları döndürmesini bekleyen ve ardından sonuçları sayfada görüntüleyen runAdditionRNNDemo adlı tek bir işlevden oluşur. .

Form verilerini çalışana göndermek için komut dosyası, çalışanda postMessage çağırır :

worker.postMessage({
  digits,
  trainingSize,
  rnnType,
  layers,
  hiddenSize,
  trainIterations,
  batchSize,
  numTestExamples
});

Çalışan bu mesajı dinler ve form verilerini, verileri hazırlayan ve eğitimi başlatan işlevlere iletir:

self.addEventListener('message', async (e) => {
  const { digits, trainingSize, rnnType, layers, hiddenSize, trainIterations, batchSize, numTestExamples } = e.data;
  const demo = new AdditionRNNDemo(digits, trainingSize, rnnType, layers, hiddenSize);
  await demo.train(trainIterations, batchSize, numTestExamples);
})

Eğitim sırasında çalışan, biri isPredict true olarak ayarlanmış olmak üzere iki farklı mesaj türü gönderebilir

self.postMessage({
  isPredict: true,
  i, iterations, modelFitTime,
  lossValues, accuracyValues,
});

ve diğeri isPredict false olarak ayarlı.

self.postMessage({
  isPredict: false,
  isCorrect, examples
});

UI iş parçacığı ( index.js ) mesaj olaylarını işlediğinde, çalışandan döndürülen verilerin şeklini belirlemek için isPredict bayrağını kontrol eder . isPredict doğruysa veriler bir tahmini temsil etmelidir ve komut dosyası tfjs-vis kullanarak sayfayı günceller . isPredict false ise komut dosyası, verilerin örnekleri temsil ettiğini varsayan bir kod bloğu çalıştırır. Verileri HTML'ye sarar ve HTML'yi sayfaya ekler.

Sırada ne var?

Bu eğitimde, uzun süren bir eğitim süreciyle UI iş parçacığının engellenmesini önlemek için bir web çalışanı kullanmanın bir örneği sağlanmıştır. Arka planda pahalı hesaplamalar yapmanın yararları hakkında daha fazla bilgi edinmek için bkz. Tarayıcının ana iş parçacığından JavaScript çalıştırmak için web çalışanlarını kullanma .

TensorFlow.js modelini eğitme hakkında daha fazla bilgi edinmek için bkz. Eğitim modelleri .