Debugging là một công việc tẻ nhạt và đầy thử thách. Chúng tôi phải viết mã và xác định các vấn đề thông qua Debugging tensorflow. Thông thường, có nhiều hướng dẫn và quá trình Debugging thường được ghi lại đầy đủ cho nhiều ngôn ngữ và khuôn khổ.
TensorFlow có trình Debugging được gọi là tfdbg TensorFlow Debugging, cho phép chúng tôi quan sát hoạt động cơ bản và trạng thái của biểu đồ đang chạy. Chúng rất khó Debugging với bất kỳ trình Debugging nào như pdb trong python.
Hướng dẫn này sẽ giải quyết việc dạy chúng ta cách sử dụng tfdbg CLI để Debugging sự xuất hiện của nans và biểu tượng, là những loại lỗi phổ biến nhất được tìm thấy trong luồng tensor. Dưới đây là một ví dụ về API cấp thấp.
Python-m tensorflow.python.debug.examples.debug_mnist
Đoạn mã được đưa ra ở trên huấn luyện một mạng nơ-ron để nhận dạng hình ảnh chữ số MNIST và độ chính xác tăng lên trước khi bão hòa sau một vài bước.
Lỗi này có thể là infs và nans, có nhiều lỗi phổ biến nhất. Bây giờ hãy sử dụng tfdbg để Debugging sự cố và biết chính xác sự cố bắt đầu từ đâu.
Gói các phiên TensorFlow với tfdbg
Thêm dòng mã bên dưới để sử dụng tfdbg và chứa đối tượng phiên sử dụng trình bao bọc trình Debugging.
From tensorflow.python import debug as tf_debug sess= tf_debug.LocalCLIDebugWrapperSession (sess)
Lớp wrapper cung cấp một số tính năng bổ sung, bao gồm: CLI có thể được gọi trước và sau Session. run () nếu chúng ta muốn kiểm soát việc thực thi và biết trạng thái bên trong của đồ thị.
Bộ lọc có thể được thêm vào để hỗ trợ chẩn đoán. Trong ví dụ được cung cấp, có một bộ lọc được gọi là tfdbg.has_inf_or_nan, xác định sự hiện diện của Nan hoặc inf trong bất kỳ tensor ở giữa nào, không phải là đầu vào cũng không phải đầu ra.
Chúng tôi luôn tự do viết mã của mình cho các bộ lọc tùy chỉnh phù hợp với nhu cầu của chúng tôi và chúng tôi có thể xem tài liệu API để biết thêm thông tin.
Debugging train mô hình TensorFlow với tfdbg
Đã đến lúc đào tạo mô hình với việc bao gồm cờ Debugging:
python-m tensorflow.python.debug.examples.debug_mnist-debug
Dữ liệu đã tìm nạp có thể được hiển thị trên màn hình và giống như hình ảnh bên dưới:
Hình trên là giao diện run-start. Sau đó, nhập r tại dấu nhắc:
tfdbg>run
Điều này sẽ làm cho trình Debugging TensorFlow chạy nếu phiên tiếp theo gọi, tính toán độ chính xác cho tập dữ liệu thử nghiệm.
Ví dụ:
Chúng ta có thể liệt kê các tensor bằng lệnh sau khi chúng ta đã thực hiện chạy.
Các lệnh Debugging TensorFlow thường được sử dụng
Trong quá trình phát triển mô hình với TensorFlow, việc sử dụng các lệnh debugging là rất quan trọng để theo dõi và phân tích quá trình học của mô hình. TensorFlow cung cấp một công cụ debugging mạnh mẽ là TensorFlow Debugger (tfdbg), giúp nhà phát triển có thể theo dõi và phân tích quá trình học của mạng nơ-ron. Dưới đây là một số lệnh debugging thường được sử dụng trong TensorFlow Debugger:
Lệnh Tại Dấu Nhắc tfdbg>prompt
- Hiển Thị Kết Quả Mới:
- Mỗi khi nhập một lệnh vào tfdbg, kết quả hiển thị sẽ được cập nhật hoàn toàn mới, tương tự như làm mới một trang web trong trình duyệt.
- Điều này cho phép nhà phát triển nắm bắt được tình trạng hiện tại của mô hình sau mỗi lệnh thực thi.
- Điều Hướng Giữa Các Màn Hình:
- Trong tfdbg, bạn có thể dễ dàng điều hướng giữa các màn hình khác nhau bằng cách sử dụng các mũi tên văn bản <- và ->.
- Những mũi tên này thường nằm gần góc trên bên trái của Command Line Interface (CLI), giúp bạn chuyển đổi giữa các tầng của mô hình hoặc xem các thông số khác nhau.
- Các Lệnh Debugging Cơ Bản:
list_tensors
hoặclt
: Liệt kê tất cả các tensor có trong phiên bản hiện tại của mô hình.node_info
hoặcni
: Cung cấp thông tin chi tiết về một node cụ thể trong đồ thị.print_tensor
hoặcpt
: In giá trị của một tensor cụ thể.
- Lệnh Kiểm Tra Mô Hình:
run
: Tiếp tục thực hiện quá trình học hoặc đánh giá mô hình.focus
hoặcfoc
: Tập trung vào một node hoặc tensor cụ thể để phân tích chi tiết.
Tính năng của tfdbg CLI
Tương tự, giống như các lệnh Debugging TensorFlow được lập chỉ mục ở trên, tfdbg CLI cung cấp các khả năng bổ sung tiếp theo:
Để điều hướng qua các hướng dẫn tfdbg trước đó bắt đầu với các ký tự của một người.
Để điều hướng qua các hướng dẫn tfdbg trước đó, hãy nhập một số ký tự kèm theo các phím mũi tên lên hoặc xuống. Tfdbg sẽ cho chúng ta thấy lịch sử của các hướng dẫn bắt đầu từ thái độ của một người.
Để điều hướng qua các bản ghi của kết quả đầu ra màn hình, hãy thực hiện cả hai thao tác sau:
Nhấp vào các siêu liên kết <-and-> được gạch chân gần với hình tròn bên trái góc của màn hình hiển thị. Để chuyển hướng đầu ra của màn hình hiển thị thành một bản ghi tùy thích cho màn hình, thoát lệnh sẽ chuyển hướng đầu ra của lệnh pt đến
/tmp/xent_value_slices.txtfile: tfdbg> pt crosses_entropy/Log:0[:, 0:10] > /tmp/xnt_value_slices.txt
Tìm nans và infs
Trong lần gọi Run () tư vấn đầu tiên này, Nó không có giá trị số phức tạp. Chúng ta có thể chuyển sang chạy theo bằng cách sử dụng lệnh run hoặc tốc ký r của nó.
Ngoài ra, chúng ta có thể sử dụng cờ -t để truyền tải trước và một số Phiên. Chạy () các cuộc gọi cùng một lúc, Các cuộc gọi Run () mà không dừng lại khi kích hoạt run-start hoặc run-stop, cho đến khi giá trị Nan hoặc inf chính trong biểu đồ. Điều đó tương tự với các điểm ngắt có điều kiện trong trình Debugging ngôn ngữ thủ tục trong tensorflow:
tfdbg> run -f has_inf_or_nan
Lệnh trước hoạt động tốt bởi vì một tensor xóa được gọi là has_inf_or_nan đã được đăng ký để sử dụng khi tham vấn gói được tạo.
def my_filter_callable (datum, tensor): return len(tensor. Shape) == 0 and tensor == 0 sess.add_tensor_filter('my_filter', my_filters_callable) The tfdbg run-start prompt Run until our filter is precipitated: tfdbg> run -f my_filter
Xem tài liệu API để biết thêm thống kê về chữ ký dự kiến và quay lại giá trị của vị từ có thể gọi được sử dụng với add_tensor_filter ().
Bởi vì màn hình gợi ý trên dòng chính, bộ lọc has_inf_or_nan lần đầu tiên được đưa về lần tư vấn thứ tư.
Lệnh gọi Run (): Trình tối ưu hóa Adam bỏ qua biểu đồ. Trong lần chạy này, 36 hàng chục trung gian kết hợp các giá trị nan hoặc inf.
tfdbg>pt dross_entropy/Log:0
Cuộn xuống một cú chạm, và chúng tôi sẽ từ một số giá trị inf nằm rải rác. Nếu trường hợp của inf và Nan khó xác định bằng mắt, chúng ta có thể sử dụng lệnh sau để thực hiện tìm kiếm regex và làm nổi bật đầu ra:
tfdbg>/inf
Hoặc, để thay thế:
tfdbg>/(inf|nan)
Ngoài ra, chúng ta có thể sử dụng lệnh-s hoặc -numeric_summary để nhận tóm tắt về các loại giá trị số trong tensor:
tfdbg>pt -s cross_entropy/Log:0
Chúng ta có thể thấy rằng vài nghìn phần tử của cross_entropy / Log: zero tensors là -infs (số nguyên âm).
tfdbg> ni cross_entropy/Log
Chúng ta thấy rằng nút này có nhật ký loại op và đầu vào của nó là softmax của nút. Sau đó chạy lệnh tiếp theo để quan sát sâu hơn về tensor đầu vào:
tfdbg> pt Softmax:0
Hãy xem các giá trị trong tensor enter, tìm các số 0:
tfdbg>/0\.000
Bây giờ rõ ràng rằng nền tảng của các giá trị số khủng khiếp là các bản ghi nói chuyện entropy / Log chéo nút của các số không.
Để tìm ra dòng sai trong mã cung cấp python, hãy sử dụng cờ -t của lệnh ni để hiển thị dấu vết của quá trình sản xuất của nút:
tfdbg>ni -t cross_entropy/Log
Trong trường hợp chúng tôi nhấp vào “node_info” ở đầu màn hình, tfdbg sẽ gợi ý về mặt cơ học quá trình tạo nút.
Từ bản ghi lại, chúng tôi thấy rằng op được xây dựng ở dòng sau: debug_minist.Py:
Diff=y_*tf.log(y)
Nó có thể chú thích các dòng của một bản ghi python với các biểu tượng pops hoặc tensors với sự hỗ trợ của chúng.