Week_3 error:OperatorNotAllowedInGraphError

in the programming assignment,
under compute_cost(logits, labels) function i am getting this error:

OperatorNotAllowedInGraphError Traceback (most recent call last)
in
9 print("\033[92mAll test passed")
10
—> 11 compute_cost_test(compute_cost)

in compute_cost_test(target)
2 labels = np.array([[0., 1.], [0., 0.], [1., 0.]])
3 logits = np.array([[0.6, 0.4], [0.4, 0.6], [0.4, 0.6]])
----> 4 result = compute_cost(logits, labels)
5 print(result)
6 assert(type(result) == EagerTensor), “Use the TensorFlow API”

/opt/conda/lib/python3.7/site-packages/tensorflow/python/eager/def_function.py in call(self, *args, **kwds)
778 else:
779 compiler = “nonXla”
→ 780 result = self._call(*args, **kwds)
781
782 new_tracing_count = self._get_tracing_count()

/opt/conda/lib/python3.7/site-packages/tensorflow/python/eager/def_function.py in _call(self, *args, **kwds)
821 # This is the first call of call, so we have to initialize.
822 initializers =
→ 823 self._initialize(args, kwds, add_initializers_to=initializers)
824 finally:
825 # At this point we know that the initialization is complete (or less

/opt/conda/lib/python3.7/site-packages/tensorflow/python/eager/def_function.py in _initialize(self, args, kwds, add_initializers_to)
695 self._concrete_stateful_fn = (
696 self._stateful_fn._get_concrete_function_internal_garbage_collected( # pylint: disable=protected-access
→ 697 *args, **kwds))
698
699 def invalid_creator_scope(*unused_args, **unused_kwds):

/opt/conda/lib/python3.7/site-packages/tensorflow/python/eager/function.py in _get_concrete_function_internal_garbage_collected(self, *args, **kwargs)
2853 args, kwargs = None, None
2854 with self._lock:
→ 2855 graph_function, _, _ = self._maybe_define_function(args, kwargs)
2856 return graph_function
2857

/opt/conda/lib/python3.7/site-packages/tensorflow/python/eager/function.py in _maybe_define_function(self, args, kwargs)
3211
3212 self._function_cache.missed.add(call_context_key)
→ 3213 graph_function = self._create_graph_function(args, kwargs)
3214 self._function_cache.primary[cache_key] = graph_function
3215 return graph_function, args, kwargs

/opt/conda/lib/python3.7/site-packages/tensorflow/python/eager/function.py in _create_graph_function(self, args, kwargs, override_flat_arg_shapes)
3073 arg_names=arg_names,
3074 override_flat_arg_shapes=override_flat_arg_shapes,
→ 3075 capture_by_value=self._capture_by_value),
3076 self._function_attributes,
3077 function_spec=self.function_spec,

/opt/conda/lib/python3.7/site-packages/tensorflow/python/framework/func_graph.py in func_graph_from_py_func(name, python_func, args, kwargs, signature, func_graph, autograph, autograph_options, add_control_dependencies, arg_names, op_return_value, collections, capture_by_value, override_flat_arg_shapes)
984 _, original_func = tf_decorator.unwrap(python_func)
985
→ 986 func_outputs = python_func(*func_args, **func_kwargs)
987
988 # invariant: func_outputs contains only Tensors, CompositeTensors,

/opt/conda/lib/python3.7/site-packages/tensorflow/python/eager/def_function.py in wrapped_fn(*args, **kwds)
598 # wrapped allows AutoGraph to swap in a converted function. We give
599 # the function a weak reference to itself to avoid a reference cycle.
→ 600 return weak_wrapped_fn().wrapped(*args, **kwds)
601 weak_wrapped_fn = weakref.ref(wrapped_fn)
602

/opt/conda/lib/python3.7/site-packages/tensorflow/python/framework/func_graph.py in wrapper(*args, **kwargs)
971 except Exception as e: # pylint:disable=broad-except
972 if hasattr(e, “ag_error_metadata”):
→ 973 raise e.ag_error_metadata.to_exception(e)
974 else:
975 raise

OperatorNotAllowedInGraphError: in user code:

<ipython-input-47-0a302c298e3e>:19 compute_cost  *
    cost=tf.reduce_mean(max(logits,0)-logits*labels +tf.log(1+tf.exp(-abs(logits))),axis=1)
/opt/conda/lib/python3.7/site-packages/tensorflow/python/framework/ops.py:877 __bool__  **
    self._disallow_bool_casting()
/opt/conda/lib/python3.7/site-packages/tensorflow/python/framework/ops.py:487 _disallow_bool_casting
    "using a `tf.Tensor` as a Python `bool`")
/opt/conda/lib/python3.7/site-packages/tensorflow/python/framework/ops.py:474 _disallow_when_autograph_enabled
    " indicate you are trying to use an unsupported feature.".format(task))

OperatorNotAllowedInGraphError: using a tf.Tensor as a Python bool is not allowed: AutoGraph did convert this function. This might indicate you are trying to use an unsupported feature.
how may i debug it?

Hi @pragyan, welcome to Discourse,

Looks like you are conflicting the instruction:

Here again, the delightful @tf.function decorator steps in and saves you time. All you need to do is specify how to compute the cost, and you can do so in one simple step by using:

tf.reduce_mean(tf.keras.losses.binary_crossentropy(y_true = …, y_pred = …, from_logits=True))

with the reference of how it is calculated in TensorFlow:

Just for reference here is how the Binary Cross entropy is calculated in TensorFlow:

mean_reduce(max(logits, 0) - logits * labels + log(1 + exp(-abs(logits))), axis=-1)

For the exercise you should use the former, specifying y_true and y_pred.

Below I add some previous comments on the topic that may be of your interest:

2 Likes

thanks a lot !
I have one more question that is ,
when we used

then why did it fail ?