diff --git a/src/TensorFlowNET.Core/APIs/tf.math.cs b/src/TensorFlowNET.Core/APIs/tf.math.cs index f18ece8c..d3b24373 100644 --- a/src/TensorFlowNET.Core/APIs/tf.math.cs +++ b/src/TensorFlowNET.Core/APIs/tf.math.cs @@ -57,6 +57,12 @@ namespace Tensorflow public static Tensor arg_min(Tensor input, int dimension, TF_DataType output_type = TF_DataType.TF_INT64, string name = null) => gen_math_ops.arg_min(input, dimension, output_type: output_type, name: name); + public static Tensor is_finite(Tensor input, string name = null) + => gen_math_ops.is_finite(input, name); + + public static Tensor is_nan(Tensor input, string name = null) + => gen_math_ops.is_nan(input, name); + /// /// Returns element-wise smallest integer not less than x. /// diff --git a/src/TensorFlowNET.Core/Operations/gen_math_ops.cs b/src/TensorFlowNET.Core/Operations/gen_math_ops.cs index 0999ad59..7ab6f858 100644 --- a/src/TensorFlowNET.Core/Operations/gen_math_ops.cs +++ b/src/TensorFlowNET.Core/Operations/gen_math_ops.cs @@ -376,6 +376,13 @@ namespace Tensorflow return _op.outputs[0]; } + public static Tensor is_nan(Tensor x, string name = null) + { + var _op = _op_def_lib._apply_op_helper("IsNan", name: name, args: new { x }); + + return _op.outputs[0]; + } + /// /// Computes exponential of x element-wise. \\(y = e^x\\). /// diff --git a/test/TensorFlowNET.UnitTest/OperationsTest.cs b/test/TensorFlowNET.UnitTest/OperationsTest.cs index 0359e4c3..7f099fde 100644 --- a/test/TensorFlowNET.UnitTest/OperationsTest.cs +++ b/test/TensorFlowNET.UnitTest/OperationsTest.cs @@ -61,6 +61,34 @@ namespace TensorFlowNET.UnitTest } } + [TestMethod] + public void isFinite() + { + var a = tf.constant(new[] { 1, np.nan, 2, np.nan, 3, np.nan, 4, np.nan }); + var b = tf.cast(tf.is_finite(a), tf.float32); + var check = np.array(1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f); + + using (var sess = tf.Session()) + { + var o = sess.run(b); + Assert.IsTrue(o.array_equal(check)); + } + } + + [TestMethod] + public void isNan() + { + var a = tf.constant(new[] { 1, np.nan, 2, np.nan, 3, np.nan, 4, np.nan }); + var b = tf.cast(tf.is_nan(a), tf.float32); + var check = np.array(0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f); + + using (var sess = tf.Session()) + { + var o = sess.run(b); + Assert.IsTrue(o.array_equal(check)); + } + } + [TestMethod] public void addOpTests() {