Ejemplo n.º 1
0
        public static double Area(NumSharp.NDArray pointSet)
        {
            int    d    = pointSet.size / 3;
            double area = 0;

            for (int i = 0; i < d - 1; i++)
            {
                area += pointSet[i, 0] * pointSet[i + 1, 1] - pointSet[i + 1, 0] * pointSet[i, 1];
            }
            area += pointSet[d - 1, 0] * pointSet[0, 1] - pointSet[0, 0] * pointSet[d - 1, 1];
            return(0.5 * Math.Abs(area));
        }
Ejemplo n.º 2
0
        public void SquaredDifference_1D()
        {
            // Calcute the gradient of (x1-x2)^2
            // by Automatic Differentiation in Eager mode
            // Expected is 2*(abs(x1-x2))
            Tensor x1 = new NumSharp.NDArray(new float[] { 1, 3, 5, 21, 19, 17 });
            Tensor x2 = new NumSharp.NDArray(new float[] { 29, 27, 23, 7, 11, 13 });

            float[] expected = new float[] {
                (29 - 1) * 2,
                (27 - 3) * 2,
                (23 - 5) * 2,
                (7 - 21) * 2,
                (11 - 19) * 2,
                (13 - 17) * 2
            };

            // Sanity check
            using (var tape = tf.GradientTape())
            {
                tape.watch(x1);
                tape.watch(x2);
                var loss = tf.multiply((x1 - x2), (x1 - x2));

                var result = tape.gradient(loss, x2);
                CollectionAssert.AreEqual(result.ToArray <float>(), expected);
            }

            // Actual test
            using (var tape = tf.GradientTape())
            {
                tape.watch(x1);
                tape.watch(x2);
                var loss = tf.squared_difference(x1, x2);

                var result = tape.gradient(loss, x2);
                CollectionAssert.AreEqual(result.ToArray <float>(), expected);
            }
        }