Rate this post

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.

Các bài viết liên quan:

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 Đào tạo 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

Xem các lệnh sau tại dấu nhắc tfdbg>prompt: Lưu ý rằng bất cứ khi nào chúng ta nhập lệnh, kết quả hiển thị hoàn toàn mới sẽ được nhìn thấy. Điều đó tương tự như các trang internet trong trình duyệt. Chúng tôi có thể điều hướng giữa các màn hình đó bằng cách nhấp vào mũi tên văn bản <-and-> gần góc trên bên trái của CLI.

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.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now