コード例 #1
0
    def _tf_sparsemax_loss(self, z, q, dtype, use_gpu):
        z = z.astype(dtype)
        q = q.astype(dtype)

        with self.test_session(use_gpu=use_gpu):
            tf_sparsemax_op = sparsemax(z)
            tf_loss_op = sparsemax_loss(z, tf_sparsemax_op, q)
            tf_loss_out = tf_loss_op.eval()

        return tf_loss_op, tf_loss_out
コード例 #2
0
    def _test_gradient_against_numpy(self, dtype, random, use_gpu):
        """check sparsemax Rop, aginst numpy Rop"""
        z = random.uniform(low=-3, high=3, size=(test_obs, 10)).astype(dtype)

        logits = constant_op.constant(z, name='z')
        sparsemax_op = sparsemax(logits)
        sparsemax_grad_op = gradients_impl.gradients(sparsemax_op, [logits])[0]

        with self.test_session(use_gpu=use_gpu):
            tf_grad = sparsemax_grad_op.eval()
            np_grad = self._np_sparsemax_grad(z)

            self.assertAllCloseAccordingToType(np_grad, tf_grad)
            self.assertShapeEqual(np_grad, sparsemax_grad_op)
コード例 #3
0
    def _test_gradient_against_estimate(self, dtype, random, use_gpu):
        """check sparsemax Rop, aginst estimated Rop"""
        z = random.uniform(low=-3, high=3, size=(test_obs, 10)).astype(dtype)

        logits = array_ops.placeholder(dtype, name='z')
        sparsemax_op = sparsemax(logits)

        with self.test_session(use_gpu=use_gpu):
            err = gradient_checker.compute_gradient_error(logits,
                                                          z.shape,
                                                          sparsemax_op,
                                                          z.shape,
                                                          x_init_value=z,
                                                          delta=1e-9)

        self.assertLess(err, 1e-4)
コード例 #4
0
    def _test_gradient_against_numpy(self, dtype, random, use_gpu):
        """check sparsemax-loss Rop, aginst numpy Rop"""
        z = random.uniform(low=-3, high=3, size=(test_obs, 10))
        q = np.zeros((test_obs, 10))
        q[np.arange(0, test_obs), np.random.randint(0, 10, size=test_obs)] = 1

        logits = constant_op.constant(z.astype(dtype), name='z')
        sparsemax_op = sparsemax(logits)
        loss_op = sparsemax_loss(logits, sparsemax_op, q.astype(dtype))
        loss_grad_op = gradients_impl.gradients(loss_op, [logits])[0]

        with self.test_session(use_gpu=use_gpu):
            tf_grad = loss_grad_op.eval()
            np_grad = self._np_sparsemax_loss_grad(z, q).astype(dtype)

            self.assertShapeEqual(np_grad, loss_grad_op)
コード例 #5
0
    def _test_gradient_against_estimate(self, dtype, random, use_gpu):
        """check sparsemax-loss Rop, aginst estimated-loss Rop"""
        z = random.uniform(low=-3, high=3, size=(test_obs, 10)).astype(dtype)
        q = np.zeros((test_obs, 10)).astype(dtype)
        q[np.arange(0, test_obs), np.random.randint(0, 10, size=test_obs)] = 1

        logits = array_ops.placeholder(dtype, name='z')
        sparsemax_op = sparsemax(logits)
        loss_op = sparsemax_loss(logits, sparsemax_op, q)

        with self.test_session(use_gpu=use_gpu):
            err = gradient_checker.compute_gradient_error(logits,
                                                          z.shape,
                                                          loss_op,
                                                          (test_obs, ),
                                                          x_init_value=z,
                                                          delta=1e-9)

        self.assertLess(err, 1e-4)
コード例 #6
0
    def _tf_sparsemax(self, z, dtype, use_gpu):
        with self.test_session(use_gpu=use_gpu):
            tf_sparsemax_op = sparsemax(z.astype(dtype))
            tf_sparsemax_out = tf_sparsemax_op.eval()

        return tf_sparsemax_op, tf_sparsemax_out