Tôi đã chạy TensorFlow và tôi xảy ra để có một cái gì đó tạo ra một NaN. Tôi muốn biết nó là gì nhưng tôi không biết làm thế nào để làm điều này. Vấn đề chính là trong một chương trình thủ tục "bình thường" tôi sẽ chỉ viết một tuyên bố in ngay trước khi hoạt động được thực hiện. Vấn đề với TensorFlow là tôi không thể làm điều đó vì lần đầu tiên tôi khai báo (hoặc xác định) biểu đồ, vì vậy việc thêm các câu lệnh in vào định nghĩa biểu đồ không giúp ích gì. Có bất kỳ quy tắc, lời khuyên, chẩn đoán, bất cứ điều gì để theo dõi những gì có thể gây ra NaN?Làm cách nào để gỡ lỗi giá trị NaN trong TensorFlow?
Trong trường hợp này tôi biết chính xác hơn những gì dòng để nhìn vào bởi vì tôi có những điều sau đây:
Delta_tilde = 2.0*tf.matmul(x,W) - tf.add(WW, XX) #note this quantity should always be positive because its pair-wise euclidian distance
Z = tf.sqrt(Delta_tilde)
Z = Transform(Z) # potentially some transform, currently I have it to return Z for debugging (the identity)
Z = tf.pow(Z, 2.0)
A = tf.exp(Z)
khi dòng này là hiện tại tôi có nó mà nó trả về NaN như tuyên bố của các nhà văn tóm tắt của tôi . Tại sao điều này? Có cách nào ít nhất để khám phá giá trị Z có sau khi bắt nguồn từ hình vuông của nó không?
Ví dụ cụ thể mà tôi đã đăng, tôi đã thử tf.Print(0,Z)
nhưng không thành công khi in không có gì. Như trong:
Delta_tilde = 2.0*tf.matmul(x,W) - tf.add(WW, XX) #note this quantity should always be positive because its pair-wise euclidian distance
Z = tf.sqrt(Delta_tilde)
tf.Print(0,[Z]) # <-------- TF PRINT STATMENT
Z = Transform(Z) # potentially some transform, currently I have it to return Z for debugging (the identity)
Z = tf.pow(Z, 2.0)
A = tf.exp(Z)
Tôi thực sự không hiểu những gì tf.Print
là giả sử để làm. Tại sao cần hai đối số? Nếu tôi muốn in 1 tensor tại sao tôi cần phải vượt qua 2? Dường như kỳ lạ với tôi.
Tôi đã nhìn vào chức năng tf.add_check_numerics_ops() nhưng nó không nói như thế nào để sử dụng nó (cộng với các tài liệu có vẻ không được siêu hữu ích). Có ai biết cách sử dụng cái này không?
Vì tôi đã nhận xét về việc giải quyết dữ liệu có thể xấu, tôi đang sử dụng MNIST chuẩn. Tuy nhiên, tôi tính toán một số lượng tích cực (khoảng cách eucledian đôi khôn ngoan) và sau đó hình vuông rễ nó. Vì vậy, tôi sẽ không thấy cách dữ liệu cụ thể sẽ là một vấn đề.
FYI này bỏ lỡ một số ops khi tối ưu được sử dụng - https://github.com/tensorflow/tensorflow/issues/2288 –