Đào tạo một mô hình bằng nhân viên web,Đào tạo một mô hình bằng nhân viên web

Trong hướng dẫn này, bạn sẽ khám phá một ứng dụng web mẫu sử dụng nhân viên web để huấn luyện Mạng thần kinh tái phát (RNN) thực hiện phép cộng số nguyên. Ứng dụng ví dụ không xác định rõ ràng toán tử cộng. Thay vào đó, nó huấn luyện RNN bằng cách sử dụng các tổng mẫu.

Tất nhiên, đây không phải là cách hiệu quả nhất để cộng hai số nguyên! Tuy nhiên, hướng dẫn này trình bày một kỹ thuật quan trọng trong web ML: cách thực hiện các phép tính chạy dài mà không chặn luồng chính xử lý logic giao diện người dùng.

Ứng dụng ví dụ cho hướng dẫn này có sẵn trực tuyến , do đó bạn không cần tải xuống bất kỳ mã nào hoặc thiết lập môi trường phát triển. Nếu bạn muốn chạy mã cục bộ, hãy hoàn thành các bước tùy chọn trong Chạy ví dụ cục bộ . Nếu bạn không muốn thiết lập môi trường phát triển, bạn có thể bỏ qua phần Khám phá ví dụ .

Mã ví dụ có sẵn trên GitHub .

(Tùy chọn) Chạy ví dụ cục bộ

Điều kiện tiên quyết

Để chạy ứng dụng mẫu cục bộ, bạn cần cài đặt những thứ sau trong môi trường phát triển của mình:

Cài đặt và chạy ứng dụng mẫu

  1. Sao chép hoặc tải xuống kho lưu trữ tfjs-examples .
  2. Thay đổi vào thư mục addition-rnn-webworker :

    cd tfjs-examples/addition-rnn-webworker
    
  3. Cài đặt phụ thuộc:

    yarn
    
  4. Khởi động máy chủ phát triển:

    yarn run watch
    

Khám phá ví dụ

Mở ứng dụng ví dụ . (Hoặc, nếu bạn đang chạy ví dụ cục bộ, hãy truy cập http://localhost:1234 trong trình duyệt của bạn.)

Bạn sẽ thấy một trang có tiêu đề TensorFlow.js: Addition RNN . Làm theo hướng dẫn để dùng thử ứng dụng.

Sử dụng biểu mẫu web, bạn có thể cập nhật một số tham số được sử dụng để huấn luyện mô hình, bao gồm:

  • Chữ số : Số chữ số tối đa trong các điều khoản được thêm vào.
  • Kích thước đào tạo : Số lượng ví dụ đào tạo cần tạo.
  • Loại RNN : Một trong SimpleRNN , GRU hoặc LSTM .
  • RNN Hidden Layer Size : Kích thước của không gian đầu ra (phải là số nguyên dương).
  • Kích thước lô : Số lượng mẫu trên mỗi lần cập nhật gradient.
  • Train Iterations : Số lần huấn luyện mô hình bằng cách gọi model.fit()
  • # ví dụ thử nghiệm : Số chuỗi mẫu (ví dụ: 27+41 ) cần tạo.

Hãy thử huấn luyện mô hình với các tham số khác nhau và xem liệu bạn có thể cải thiện độ chính xác của dự đoán cho các bộ chữ số khác nhau hay không. Cũng lưu ý rằng thời gian điều chỉnh mô hình bị ảnh hưởng bởi các thông số khác nhau như thế nào.

Khám phá mã

Ứng dụng ví dụ minh họa một số tham số mà bạn có thể định cấu hình để huấn luyện RNN. Nó cũng minh họa cách sử dụng webworker để huấn luyện một mô hình ngoài luồng chính. Nhân viên web rất quan trọng trong web ML vì chúng cho phép bạn chạy các tác vụ đào tạo tốn kém về mặt tính toán trên một luồng nền, do đó tránh được các vấn đề về hiệu suất có thể ảnh hưởng đến người dùng trên luồng chính. Các luồng chính và luồng công nhân giao tiếp với nhau thông qua các sự kiện tin nhắn.

Để tìm hiểu thêm về web Workers, hãy xem Web Workers APISử dụng Web Workers .

Mô-đun chính cho ứng dụng ví dụ là index.js . Tập lệnh index.js tạo một web worker chạy mô-đun worker.js :

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

index.js phần lớn bao gồm một hàm duy nhất, runAdditionRNNDemo , xử lý việc gửi biểu mẫu, xử lý dữ liệu biểu mẫu, chuyển dữ liệu biểu mẫu cho nhân viên, đợi nhân viên huấn luyện mô hình và trả về kết quả, sau đó hiển thị kết quả trên trang .

Để gửi dữ liệu biểu mẫu cho Worker, tập lệnh gọi postMessage trên Worker:

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

Nhân viên lắng nghe thông báo này và chuyển dữ liệu biểu mẫu đến các hàm chuẩn bị dữ liệu và bắt đầu đào tạo:

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);
})

Trong quá trình đào tạo, nhân viên có thể gửi hai loại tin nhắn khác nhau, một loại có isPredict được đặt thành true

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

cái còn lạiisPredict được đặt thành false .

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

Khi luồng giao diện người dùng ( index.js ) xử lý các sự kiện tin nhắn, nó sẽ kiểm tra cờ isPredict để xác định hình dạng của dữ liệu được trả về từ trình chạy. Nếu isPredict đúng, dữ liệu sẽ thể hiện dự đoán và tập lệnh sẽ cập nhật trang bằng cách sử dụng tfjs-vis . Nếu isPredict sai, tập lệnh sẽ chạy một khối mã giả định rằng dữ liệu đại diện cho các ví dụ. Nó bao bọc dữ liệu trong HTML và chèn HTML vào trang.

Tiếp theo là gì

Hướng dẫn này đã cung cấp ví dụ về cách sử dụng nhân viên web để tránh chặn luồng giao diện người dùng bằng quy trình đào tạo kéo dài. Để tìm hiểu thêm về lợi ích của việc thực hiện các phép tính tốn kém trên một luồng nền, hãy xem Sử dụng nhân viên web để chạy JavaScript khỏi luồng chính của trình duyệt .

Để tìm hiểu thêm về cách đào tạo mô hình TensorFlow.js, hãy xem phần Đào tạo mô hình .