TensorFlow定義張量連接到CheckNumericsOp

2018-09-07 13:51 更新

#版權所有2015 TensorFlow作者.版權所有.

#根據(jù)Apache許可證2.0版(“許可證”)許可;

#你不能使用這個文件,除非符合許可證.

#您可以獲得許可證的副本

#http      ://www.apache.org/licenses/LICENSE-2.0

#除非適用法律要求或書面同意軟件

根據(jù)許可證分發(fā)的#分發(fā)在“按原樣”基礎上,

#無明示或暗示的任何形式的擔?;驐l件.

#查看有關權限的特定語言的許可證

#許可證下的限制.

# =============================================== =============================

“”“將所有的 half, float and double 張量連接到CheckNumericsOp.”“”

from __future__ import absolute_import

from __future__ import division

from __future__ import print_function

from tensorflow.python.framework import dtypes

from tensorflow.python.framework import ops

from tensorflow.python.ops import array_ops

from tensorflow.python.ops import control_flow_ops

def verify_tensor_all_finite(t, msg, name=None):

  """Assert that the tensor does not contain any NaN's or Inf's.

  Args:

    t: Tensor to check.

    msg: Message to log on failure.

    name: A name for this operation (optional).

  Returns:

    Same tensor as `t`.

  """

  with ops.name_scope(name, "VerifyFinite", [t]) as name:

    t = ops.convert_to_tensor(t, name="t")

    with ops.colocate_with(t):

      verify_input = array_ops.check_numerics(t, message=msg)

      out = control_flow_ops.with_dependencies([verify_input], t)

  return out

def add_check_numerics_ops():

  """Connect a `check_numerics` to every floating point tensor.

  `check_numerics` operations themselves are added for each `half`, `float`,

  or `double` tensor in the graph. For all ops in the graph, the

  `check_numerics` op for all of its (`half`, `float`, or `double`) inputs

  is guaranteed to run before the `check_numerics` op on any of its outputs.

  Returns:

    A `group` op depending on all `check_numerics` ops added.

  """

  check_op = []

  # This code relies on the ordering of ops in get_operations().

  # The producer of a tensor always comes before that tensor's consumer in

  # this list. This is true because get_operations() returns ops in the order

  # added, and an op can only be added after its inputs are added.

  for op in ops.get_default_graph().get_operations():

    for output in op.outputs:

      if output.dtype in [dtypes.float16, dtypes.float32, dtypes.float64]:

        message = op.name + ":" + str(output.value_index)

        with ops.control_dependencies(check_op):

          check_op = [array_ops.check_numerics(output, message=message)]

  return control_flow_ops.group(*check_op)

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號