CNTK - Giám sát mô hình
Trong chương này, chúng ta sẽ hiểu cách giám sát một mô hình trong CNTK.
Giới thiệu
Trong các phần trước, chúng tôi đã thực hiện một số xác nhận trên các mô hình NN của chúng tôi. Tuy nhiên, việc giám sát mô hình của chúng ta trong quá trình đào tạo có cần thiết và có thể thực hiện được không?
Có, chúng tôi đã sử dụng ProgressWriterđể giám sát mô hình của chúng tôi và có nhiều cách khác để làm như vậy. Trước khi đi sâu vào các cách thức, trước tiên chúng ta hãy xem cách hoạt động của giám sát trong CNTK và cách chúng ta có thể sử dụng nó để phát hiện các vấn đề trong mô hình NN của mình.
Gọi lại trong CNTK
Trên thực tế, trong quá trình đào tạo và xác thực, CNTK cho phép chúng tôi chỉ định các lệnh gọi lại ở một số vị trí trong API. Đầu tiên, chúng ta hãy xem xét kỹ hơn khi CNTK gọi các lệnh gọi lại.
Khi CNTK gọi lại?
CNTK sẽ gọi các lệnh gọi lại tại các thời điểm tập huấn luyện và thử nghiệm khi−
Một minibatch đã hoàn thành.
Quá trình quét toàn bộ tập dữ liệu được hoàn thành trong quá trình đào tạo.
Một loạt thử nghiệm nhỏ đã hoàn thành.
Quá trình quét toàn bộ tập dữ liệu được hoàn tất trong quá trình thử nghiệm.
Chỉ định các lệnh gọi lại
Trong khi làm việc với CNTK, chúng tôi có thể chỉ định các lệnh gọi lại ở một số vị trí trong API. Ví dụ:
Khi gọi tàu trên một hàm mất mát?
Ở đây, khi chúng ta gọi train trên một hàm loss, chúng ta có thể chỉ định một tập hợp các lệnh gọi lại thông qua đối số gọi lại như sau:
training_summary=loss.train((x_train,y_train),
parameter_learners=[learner],
callbacks=[progress_writer]),
minibatch_size=16, max_epochs=15)
Khi làm việc với nguồn minibatch hoặc sử dụng vòng lặp minibatch thủ công−
Trong trường hợp này, chúng tôi có thể chỉ định các lệnh gọi lại cho mục đích giám sát trong khi tạo Trainer như sau
from cntk.logging import ProgressPrinter
callbacks = [
ProgressPrinter(0)
]
Trainer = Trainer(z, (loss, metric), learner, [callbacks])
Các công cụ giám sát khác nhau
Hãy để chúng tôi nghiên cứu về các công cụ giám sát khác nhau.
ProgressPrinter
Trong khi đọc hướng dẫn này, bạn sẽ thấy ProgressPrinterlà công cụ giám sát được sử dụng nhiều nhất. Một số đặc điểm củaProgressPrinter công cụ giám sát là
ProgressPrinterlớp thực hiện ghi nhật ký dựa trên giao diện điều khiển cơ bản để giám sát mô hình của chúng tôi. Nó có thể đăng nhập vào đĩa mà chúng tôi muốn.
Đặc biệt hữu ích khi làm việc trong một kịch bản đào tạo phân tán.
Nó cũng rất hữu ích khi làm việc trong trường hợp chúng ta không thể đăng nhập vào bảng điều khiển để xem kết quả của chương trình Python của chúng ta.
Với sự trợ giúp của mã sau, chúng ta có thể tạo một phiên bản của ProgressPrinter-
ProgressPrinter(0, log_to_file=’test.txt’)
Chúng ta sẽ nhận được kết quả đầu ra mà chúng ta đã thấy trong các phần trước−
Test.txt
CNTKCommandTrainInfo: train : 300
CNTKCommandTrainInfo: CNTKNoMoreCommands_Total : 300
CNTKCommandTrainBegin: train
-------------------------------------------------------------------
average since average since examples
loss last metric last
------------------------------------------------------
Learning rate per minibatch: 0.1
1.45 1.45 -0.189 -0.189 16
1.24 1.13 -0.0382 0.0371 48
[………]
TensorBoard
Một trong những nhược điểm của việc sử dụng ProgressPrinter là chúng ta không thể có một cái nhìn rõ ràng về mức độ mất mát và tiến trình số liệu theo thời gian là khó. TensorBoardProgressWriter là một sự thay thế tuyệt vời cho lớp ProgressPrinter trong CNTK.
Trước khi sử dụng nó, trước tiên chúng ta cần cài đặt nó với sự trợ giúp của lệnh sau:
pip install tensorboard
Bây giờ, để sử dụng TensorBoard, chúng ta cần thiết lập TensorBoardProgressWriter trong mã đào tạo của chúng tôi như sau−
import time
from cntk.logging import TensorBoardProgressWriter
tensorbrd_writer = TensorBoardProgressWriter(log_dir=’logs/{}’.format(time.time()),freq=1,model=z)
Một thực tiễn tốt là gọi phương thức đóng trên TensorBoardProgressWriter ví dụ sau khi hoàn thành việc đào tạo NNmô hình.
Chúng ta có thể hình dung TensorBoard ghi dữ liệu với sự trợ giúp của lệnh sau:
Tensorboard –logdir logs