Exemplo n.º 1
0
 def l2(tt):
     """Applies l2 regularization to TensorTrain object."""
     with tf.name_scope(scope, 'l2_regularizer', [tt]) as name:
         my_scale = tf.convert_to_tensor(scale,
                                         dtype=tt.dtype.base_dtype,
                                         name='scale')
         return tf.mul(my_scale, ops.frobenius_norm_squared(tt), name=name)
Exemplo n.º 2
0
 def testFrobeniusNormDifferentiableBatch(self):
   with self.test_session() as sess:
     tt = initializers.random_tensor_batch((3, 3, 3), tt_rank=2, batch_size=5,
                                           dtype=self.dtype)
     norm_sq_diff = ops.frobenius_norm_squared(tt, differentiable=True)
     variables = [norm_sq_diff, ops.full(tt)]
     norm_sq_diff_val, tt_full = sess.run(variables)
     desired_norm = np.linalg.norm(tt_full.reshape((5, -1)), axis=1)**2
     self.assertAllClose(norm_sq_diff_val, desired_norm, atol=1e-5, rtol=1e-5)
Exemplo n.º 3
0
 def testFrobeniusNormTens(self):
   # Frobenius norm of a batch of TT-tensors.
   with self.test_session() as sess:
     tt = initializers.tensor_batch_with_random_cores((2, 1, 3), batch_size=3,
                                                      dtype=self.dtype)
     norm_sq_actual = ops.frobenius_norm_squared(tt)
     norm_actual = ops.frobenius_norm(tt)
     vars = [norm_sq_actual, norm_actual, ops.full(tt)]
     norm_sq_actual_val, norm_actual_val, tt_val = sess.run(vars)
     tt_val = tt_val.reshape((3, -1))
     norm_sq_desired_val = np.sum(tt_val * tt_val, axis=1)
     norm_desired_val = np.sqrt(norm_sq_desired_val)
     self.assertAllClose(norm_sq_actual_val, norm_sq_desired_val)
     self.assertAllClose(norm_actual_val, norm_desired_val, atol=1e-5,
                         rtol=1e-5)
Exemplo n.º 4
0
  def testToAndFromDeltas(self):
    # Test converting to and from deltas representation of the tangent space
    # element.
    what = initializers.random_tensor((2, 3, 4), 4, dtype=self.dtype)
    where = initializers.random_tensor((2, 3, 4), 3, dtype=self.dtype)
    projected = riemannian.project(what, where)

    deltas = riemannian.tangent_space_to_deltas(projected)
    reconstructed_projected = riemannian.deltas_to_tangent_space(deltas, where)
    # Tangent space element norm can be computed from deltas norm.
    projected_normsq_desired = ops.frobenius_norm_squared(projected)
    projected_normsq_actual = tf.add_n([tf.reduce_sum(c * c) for c in deltas])
    desired_val, actual_val = self.evaluate((ops.full(projected),
                                        ops.full(reconstructed_projected)))
    self.assertAllClose(desired_val, actual_val)
    desired_val, actual_val = self.evaluate((projected_normsq_desired,
                                        projected_normsq_actual))
    self.assertAllClose(desired_val, actual_val)
Exemplo n.º 5
0
 def testFrobeniusNormMatrix(self):
   # Frobenius norm of a TT-matrix.
   shape_list = (((2, 2), (3, 4)),
                 ((2, 3, 4), (2, 2, 2)))
   rank_list = (1, 2)
   with self.test_session() as sess:
     for tensor_shape in shape_list:
       for rank in rank_list:
         tt = initializers.random_matrix(tensor_shape, tt_rank=rank,
                                         dtype=self.dtype)
         norm_sq_actual = ops.frobenius_norm_squared(tt)
         norm_actual = ops.frobenius_norm(tt)
         vars = [norm_sq_actual, norm_actual, ops.full(tt)]
         norm_sq_actual_val, norm_actual_val, tt_val = sess.run(vars)
         tt_val = tt_val.flatten()
         norm_sq_desired_val = tt_val.dot(tt_val)
         norm_desired_val = np.linalg.norm(tt_val)
         self.assertAllClose(norm_sq_actual_val, norm_sq_desired_val)
         self.assertAllClose(norm_actual_val, norm_desired_val, atol=1e-5,
                             rtol=1e-5)
Exemplo n.º 6
0
  def testToAndFromDeltasBatch(self):
    # Test converting to and from deltas representation of the tangent space
    # element in the batch case.
    what = initializers.random_matrix_batch(((2, 3, 4), (3, 3, 3)), 4,
                                            batch_size=3, dtype=self.dtype)
    where = initializers.random_matrix(((2, 3, 4), (3, 3, 3)), 3,
                                       dtype=self.dtype)
    projected = riemannian.project(what, where)

    deltas = riemannian.tangent_space_to_deltas(projected)
    reconstructed_projected = riemannian.deltas_to_tangent_space(deltas, where)
    # Tangent space element norm can be computed from deltas norm.
    projected_normsq_desired = ops.frobenius_norm_squared(projected)
    d_normssq = [tf.reduce_sum(tf.reshape(c, (3, -1)) ** 2, 1) for c in deltas]
    projected_normsq_actual = tf.add_n(d_normssq)

    desired_val, actual_val = self.evaluate((ops.full(projected),
                                        ops.full(reconstructed_projected)))
    self.assertAllClose(desired_val, actual_val)
    desired_val, actual_val = self.evaluate((projected_normsq_desired,
                                        projected_normsq_actual))
    self.assertAllClose(desired_val, actual_val)
Exemplo n.º 7
0
 def testFrobeniusNormTens(self):
     # Frobenius norm of a TT-tensor.
     shape_list = ((2, 2), (2, 3, 4), (4, 2, 5, 2))
     rank_list = (1, 2)
     for shape in shape_list:
         for rank in rank_list:
             tt = initializers.random_tensor(shape,
                                             tt_rank=rank,
                                             dtype=self.dtype)
             norm_sq_actual = ops.frobenius_norm_squared(tt)
             norm_actual = ops.frobenius_norm(tt, epsilon=0.0)
             vars = [norm_sq_actual, norm_actual, ops.full(tt)]
             norm_sq_actual_val, norm_actual_val, tt_val = self.evaluate(
                 vars)
             tt_val = tt_val.flatten()
             norm_sq_desired_val = tt_val.dot(tt_val)
             norm_desired_val = np.linalg.norm(tt_val)
             self.assertAllClose(norm_sq_actual_val, norm_sq_desired_val)
             self.assertAllClose(norm_actual_val,
                                 norm_desired_val,
                                 atol=1e-5,
                                 rtol=1e-5)