def testConvOutputKroneckerFactorInit(self):
     with tf_ops.Graph().as_default():
         random_seed.set_random_seed(200)
         tensor = array_ops.ones((2, 3, 4, 5), name='a/b/c')
         factor = ff.ConvOutputKroneckerFactor(((tensor, ), ))
         factor.instantiate_cov_variables()
         self.assertEqual([5, 5], factor.get_cov().get_shape().as_list())
Esempio n. 2
0
  def testMakeCovarianceUpdateOp(self):
    with tf_ops.Graph().as_default(), self.test_session() as sess:
      random_seed.set_random_seed(200)
      tensor = np.arange(1, 17).reshape(2, 2, 2, 2).astype(np.float32)
      factor = ff.ConvOutputKroneckerFactor((array_ops.constant(tensor),))

      sess.run(tf_variables.global_variables_initializer())
      new_cov = sess.run(factor.make_covariance_update_op(.5))
      self.assertAllClose([[43, 46.5], [46.5, 51.5]], new_cov)
Esempio n. 3
0
 def testConvOutputKroneckerFactorInitFloat64(self):
   with tf_ops.Graph().as_default():
     dtype = dtypes.float64_ref
     random_seed.set_random_seed(200)
     tensor = array_ops.ones((2, 3, 4, 5), dtype=dtype, name='a/b/c')
     factor = ff.ConvOutputKroneckerFactor((tensor,))
     cov = factor.get_cov()
     self.assertEqual(cov.dtype, dtype)
     self.assertEqual([5, 5], cov.get_shape().as_list())
    def test3DConvolution(self):
        with tf_ops.Graph().as_default():
            batch_size = 1
            width = 3
            out_channels = width**3

            factor = ff.ConvOutputKroneckerFactor(outputs_grads=([
                random_ops.random_uniform(
                    (batch_size, width, width, width, out_channels), seed=0)
            ], ))
            factor.instantiate_cov_variables()

            with self.test_session() as sess:
                sess.run(tf_variables.global_variables_initializer())
                sess.run(factor.make_covariance_update_op(0.0))
                cov = sess.run(factor.get_cov())

            # Cov should be rank 3^3, as each spatial position donates a rank-1
            # update.
            self.assertMatrixRank(width**3, cov)
 def testConvOutputKroneckerFactorInitNotEnoughDims(self):
     with tf_ops.Graph().as_default():
         random_seed.set_random_seed(200)
         tensor = array_ops.ones((2, 3), name='a/b/c')
         with self.assertRaises(IndexError):
             ff.ConvOutputKroneckerFactor((tensor, ))