Tất cả,Làm thế nào để kiểm tra NaN trong gradient trong Tensorflow khi cập nhật?
Khi bạn đào tạo một mô hình lớn với số lượng mẫu lớn, một số mẫu có thể gây ra chênh lệch NaN khi cập nhật thông số.
Và tôi muốn tìm các mẫu này. Và trong khi đó tôi không muốn gradient mẫu của lô này cập nhật tham số của mô hình, bởi vì nó có thể là nguyên nhân của tham số của mô hình là NaN.
Vì vậy, bất kỳ ai có ý tưởng tốt để giải quyết vấn đề này?
Mã của tôi là như dưới đây:
# Create an optimizer.
params = tf.trainable_variables()
opt = tf.train.AdamOptimizer(1e-3)
gradients = tf.gradients(self.loss, params)
max_gradient_norm = 10
clipped_gradients, self.gradient_norms = tf.clip_by_global_norm(gradients,
max_gradient_norm)
self.optimizer = opt.apply_gradients(zip(clipped_gradients, params))
Cảm ơn bạn rất nhiều. Nhưng tôi lại có một câu hỏi. Khi tôi thêm tf.add_check_numerics_ops() trong mã của mình, tôi gặp lỗi Out of Memory. Và loại bỏ dòng này, mọi thứ đều ổn. Mô hình của tôi thực sự lớn, vì vậy tf.add_check_numerics_ops() sẽ phân bổ nhiều bộ nhớ GPU hơn cho các kiểm tra không? – Issac
Có một bản sao tensor trong hạt nhân của 'tf.check_numerics': https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/check_numerics_op.cc#L60. Vì vậy, chỉ cần thêm một vài kiểm tra bằng cách sử dụng 'tf.check_numerics'. Cần lưu ý thêm nếu bạn muốn sử dụng 'tf.add_check_numerics_ops()' chạy 'tf.check_numerics' cho tất cả các tensors nổi được gõ. – yuefengz