簡體   English   中英

如何在 TensorFlow 圖中正確引發異常

[英]How to properly raise exception in TensorFlow graph

我想根據圖形模式下輸入張量的值(在 TensorFlow 服務中)引發tf.errors.InvalidArgumentError異常。

目前我使用tf.debugging.assert_all_finite這工作正常。 由於我不是對錯誤檢查做出斷言,而是根據輸入引發異常,因此最好引發顯式異常。

我的問題歸結為:

  • 如何有條件地執行不返回張量的代碼
  • 如何引發 tf.errors 異常。

這樣做的正確方法是什么?

編輯:更多細節。 我想在不使用 tf.debugging 的情況下重新創建以下邏輯(除非這實際上是正確的方法)。

目前我正在檢查是否沒有這樣的NaN值:

assert_op = tf.debugging.assert_all_finite(
    input_data,
    'Cant have nans at beginning or end'
)

正如您通過郵件給我寫的那樣,這可能與這個關於在圖形執行中捕獲異常的 TF 問題以及這個相關的 SO 問題有關 但是,我不確定這是否真的適合您。 這個 TF 問題和 SO 問題是關於如何動態捕獲異常,所以基本上實現try: ... except: ...在 TF 圖中。

其他引入控制結構的 TF 功能是:

  • tf.while_loop
  • tf.cond

tf.cond是您如何有條件地執行代碼的問題的答案。 取決於條件,即bool標量。 但也許這不是你的問題,而是如何制定條件?

tf.check_numerics檢查張量的 inf/nan 並在找到這樣的張量時拋出異常。

如果您想將其作為條件,您可以使用以下代碼:

is_finite = tf.reduce_all(tf.is_finite(x))

如果你想在某些條件不成立的情況下拋出異常,你可以這樣做:

check_op = tf.Assert(is_finite, ["Tensor had inf or nan values:", x])

您可能希望使用tf.control_dependencies來確保執行此操作check_op

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM