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
-
tfjs-examples
deposunu klonlayın veya indirin. addition-rnn-webworker
dizinine geçin:cd tfjs-examples/addition-rnn-webworker
Bağımlılıkları yükleyin:
yarn
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 .