예제 #1
0
  def testScalarReshape(self):
    """Test reshaping to and from a scalar shape ()."""

    expected_x = np.random.randn(4, 3, 1)
    expected_y = np.reshape(expected_x, [4, 3])

    expected_x_scalar = np.random.randn(1,)
    expected_y_scalar = expected_x_scalar[0]

    shape_in, shape_out, feed_dict = self.build_shapes([], [1,])
    with self.cached_session() as sess:
      bijector = Reshape(
          event_shape_out=shape_in,
          event_shape_in=shape_out, validate_args=True)
      (x_,
       y_,
       x_scalar_,
       y_scalar_
      ) = sess.run((
          bijector.inverse(expected_y),
          bijector.forward(expected_x),
          bijector.inverse(expected_y_scalar),
          bijector.forward(expected_x_scalar),
      ), feed_dict=feed_dict)
      self.assertAllClose(expected_y, y_, rtol=1e-6, atol=0)
      self.assertAllClose(expected_x, x_, rtol=1e-6, atol=0)
      self.assertAllClose(expected_y_scalar, y_scalar_, rtol=1e-6, atol=0)
      self.assertAllClose(expected_x_scalar, x_scalar_, rtol=1e-6, atol=0)
예제 #2
0
    def testScalarReshape(self):
        """Test reshaping to and from a scalar shape ()."""

        expected_x = np.random.randn(4, 3, 1)
        expected_y = np.reshape(expected_x, [4, 3])

        expected_x_scalar = np.random.randn(1, )
        expected_y_scalar = expected_x_scalar[0]

        shape_in, shape_out, feed_dict = self.build_shapes([], [
            1,
        ])
        with self.test_session() as sess:
            bijector = Reshape(event_shape_out=shape_in,
                               event_shape_in=shape_out,
                               validate_args=True)
            (x_, y_, x_scalar_, y_scalar_) = sess.run((
                bijector.inverse(expected_y),
                bijector.forward(expected_x),
                bijector.inverse(expected_y_scalar),
                bijector.forward(expected_x_scalar),
            ),
                                                      feed_dict=feed_dict)
            self.assertAllClose(expected_y, y_, rtol=1e-6, atol=0)
            self.assertAllClose(expected_x, x_, rtol=1e-6, atol=0)
            self.assertAllClose(expected_y_scalar,
                                y_scalar_,
                                rtol=1e-6,
                                atol=0)
            self.assertAllClose(expected_x_scalar,
                                x_scalar_,
                                rtol=1e-6,
                                atol=0)
예제 #3
0
  def testBijector(self):
    """Do a basic sanity check of forward, inverse, jacobian."""
    expected_x = np.random.randn(4, 3, 2)
    expected_y = np.reshape(expected_x, [4, 6])

    with self.test_session() as sess:
      shape_in, shape_out, feed_dict = self.build_shapes([3, 2], [6,])
      bijector = Reshape(
          event_shape_out=shape_out,
          event_shape_in=shape_in,
          validate_args=True)
      (x_,
       y_,
       fldj_,
       ildj_) = sess.run((
           bijector.inverse(expected_y),
           bijector.forward(expected_x),
           bijector.forward_log_det_jacobian(expected_x),
           bijector.inverse_log_det_jacobian(expected_y),
       ), feed_dict=feed_dict)
      self.assertEqual("reshape", bijector.name)
      self.assertAllClose(expected_y, y_, rtol=1e-6, atol=0)
      self.assertAllClose(expected_x, x_, rtol=1e-6, atol=0)
      self.assertAllClose(0., fldj_, rtol=1e-6, atol=0)
      self.assertAllClose(0., ildj_, rtol=1e-6, atol=0)
예제 #4
0
  def testBijector(self):
    """Do a basic sanity check of forward, inverse, jacobian."""
    expected_x = np.random.randn(4, 3, 2)
    expected_y = np.reshape(expected_x, [4, 6])

    with self.cached_session() as sess:
      shape_in, shape_out, feed_dict = self.build_shapes([3, 2], [6,])
      bijector = Reshape(
          event_shape_out=shape_out,
          event_shape_in=shape_in,
          validate_args=True)
      (x_,
       y_,
       fldj_,
       ildj_) = sess.run((
           bijector.inverse(expected_y),
           bijector.forward(expected_x),
           bijector.forward_log_det_jacobian(expected_x, event_ndims=2),
           bijector.inverse_log_det_jacobian(expected_y, event_ndims=2),
       ), feed_dict=feed_dict)
      self.assertEqual("reshape", bijector.name)
      self.assertAllClose(expected_y, y_, rtol=1e-6, atol=0)
      self.assertAllClose(expected_x, x_, rtol=1e-6, atol=0)
      self.assertAllClose(0., fldj_, rtol=1e-6, atol=0)
      self.assertAllClose(0., ildj_, rtol=1e-6, atol=0)
예제 #5
0
    def testRaisesOpError(self):
        x1 = np.random.randn(4, 2, 3)
        x2 = np.random.randn(4, 3, 2)
        x3 = np.random.randn(4, 5, 1, 1)

        with self.test_session() as sess:
            shape_in_ph = array_ops.placeholder(shape=[
                2,
            ],
                                                dtype=dtypes.int32)
            shape_out_ph = array_ops.placeholder(shape=[
                3,
            ],
                                                 dtype=dtypes.int32)
            bijector = Reshape(event_shape_out=shape_out_ph,
                               event_shape_in=shape_in_ph,
                               validate_args=True)

            with self.assertRaisesOpError(
                    "Input `event_shape` does not match `event_shape_in`."):
                sess.run(bijector.forward(x2),
                         feed_dict={
                             shape_out_ph: [1, 6, 1],
                             shape_in_ph: [2, 3]
                         })

            with self.assertRaisesOpError(
                    "event_shape_out entries must be positive."):
                sess.run(bijector.forward(x1),
                         feed_dict={
                             shape_out_ph: [-1, -1, 6],
                             shape_in_ph: [2, 3]
                         })

            # test that *all* methods check basic assertions
            fd_mismatched = {shape_out_ph: [1, 1, 5], shape_in_ph: [2, 3]}
            with self.assertRaisesOpError(
                    "Input/output `event_size`s do not match."):
                sess.run(bijector.forward(x1), feed_dict=fd_mismatched)
            with self.assertRaisesOpError(
                    "Input/output `event_size`s do not match."):
                sess.run(bijector.inverse(x3), feed_dict=fd_mismatched)
            with self.assertRaisesOpError(
                    "Input/output `event_size`s do not match."):
                sess.run(bijector.inverse_log_det_jacobian(x3),
                         feed_dict=fd_mismatched)
            with self.assertRaisesOpError(
                    "Input/output `event_size`s do not match."):
                sess.run(bijector.forward_log_det_jacobian(x1),
                         feed_dict=fd_mismatched)
예제 #6
0
    def _testInputOutputMismatchOpError(self, expected_error_message):
        x1 = np.random.randn(4, 2, 3)
        x2 = np.random.randn(4, 1, 1, 5)

        with self.test_session() as sess:
            shape_in, shape_out, fd_mismatched = self.build_shapes([2, 3],
                                                                   [1, 1, 5])
            bijector = Reshape(event_shape_out=shape_out,
                               event_shape_in=shape_in,
                               validate_args=True)

            with self.assertRaisesError(expected_error_message):
                sess.run(bijector.forward(x1), feed_dict=fd_mismatched)
            with self.assertRaisesError(expected_error_message):
                sess.run(bijector.inverse(x2), feed_dict=fd_mismatched)
예제 #7
0
 def testDefaultVectorShape(self):
   expected_x = np.random.randn(4, 4)
   expected_y = np.reshape(expected_x, [4, 2, 2])
   with self.cached_session() as sess:
     _, shape_out, feed_dict = self.build_shapes([-1,], [-1, 2])
     bijector = Reshape(shape_out,
                        validate_args=True)
     (x_,
      y_,
     ) = sess.run((
         bijector.inverse(expected_y),
         bijector.forward(expected_x),
     ), feed_dict=feed_dict)
     self.assertAllClose(expected_y, y_, rtol=1e-6, atol=0)
     self.assertAllClose(expected_x, x_, rtol=1e-6, atol=0)
예제 #8
0
 def testDefaultVectorShape(self):
   expected_x = np.random.randn(4, 4)
   expected_y = np.reshape(expected_x, [4, 2, 2])
   with self.test_session() as sess:
     _, shape_out, feed_dict = self.build_shapes([-1,], [-1, 2])
     bijector = Reshape(shape_out,
                        validate_args=True)
     (x_,
      y_,
     ) = sess.run((
         bijector.inverse(expected_y),
         bijector.forward(expected_x),
     ), feed_dict=feed_dict)
     self.assertAllClose(expected_y, y_, rtol=1e-6, atol=0)
     self.assertAllClose(expected_x, x_, rtol=1e-6, atol=0)
예제 #9
0
  def _testInputOutputMismatchOpError(self, expected_error_message):
    x1 = np.random.randn(4, 2, 3)
    x2 = np.random.randn(4, 1, 1, 5)

    with self.cached_session() as sess:
      shape_in, shape_out, fd_mismatched = self.build_shapes([2, 3],
                                                             [1, 1, 5])
      bijector = Reshape(
          event_shape_out=shape_out,
          event_shape_in=shape_in,
          validate_args=True)

      with self.assertRaisesError(expected_error_message):
        sess.run(bijector.forward(x1), feed_dict=fd_mismatched)
      with self.assertRaisesError(expected_error_message):
        sess.run(bijector.inverse(x2), feed_dict=fd_mismatched)
예제 #10
0
    def testInputOutputMismatchOpError(self):
        x1 = np.random.randn(4, 2, 3)
        x2 = np.random.randn(4, 1, 1, 5)

        with self.test_session() as sess:
            shape_in, shape_out, fd_mismatched = self.build_shapes([2, 3],
                                                                   [1, 1, 5])
            bijector = Reshape(event_shape_out=shape_out,
                               event_shape_in=shape_in,
                               validate_args=True)

            # test that *all* methods check basic assertions
            with self.assertRaisesError("Input to reshape is a tensor with"):
                sess.run(bijector.forward(x1), feed_dict=fd_mismatched)
            with self.assertRaisesError("Input to reshape is a tensor with"):
                sess.run(bijector.inverse(x2), feed_dict=fd_mismatched)
예제 #11
0
 def testBothShapesPartiallySpecified(self):
   expected_x = np.random.randn(4, 2, 3)
   expected_y = np.reshape(expected_x, [4, 3, 2])
   with self.cached_session() as sess:
     shape_in, shape_out, feed_dict = self.build_shapes([-1, 3], [-1, 2])
     bijector = Reshape(
         event_shape_out=shape_out,
         event_shape_in=shape_in,
         validate_args=True)
     (x_,
      y_,
     ) = sess.run((
         bijector.inverse(expected_y),
         bijector.forward(expected_x),
     ), feed_dict=feed_dict)
     self.assertAllClose(expected_y, y_, rtol=1e-6, atol=0)
     self.assertAllClose(expected_x, x_, rtol=1e-6, atol=0)
예제 #12
0
 def testBothShapesPartiallySpecified(self):
   expected_x = np.random.randn(4, 2, 3)
   expected_y = np.reshape(expected_x, [4, 3, 2])
   with self.test_session() as sess:
     shape_in, shape_out, feed_dict = self.build_shapes([-1, 3], [-1, 2])
     bijector = Reshape(
         event_shape_out=shape_out,
         event_shape_in=shape_in,
         validate_args=True)
     (x_,
      y_,
     ) = sess.run((
         bijector.inverse(expected_y),
         bijector.forward(expected_x),
     ), feed_dict=feed_dict)
     self.assertAllClose(expected_y, y_, rtol=1e-6, atol=0)
     self.assertAllClose(expected_x, x_, rtol=1e-6, atol=0)
예제 #13
0
  def testOneShapePartiallySpecified(self):
    expected_x = np.random.randn(4, 6)
    expected_y = np.reshape(expected_x, [4, 2, 3])

    with self.test_session() as sess:
      # one of input/output shapes is partially specified
      shape_in, shape_out, feed_dict = self.build_shapes([-1,], [2, 3])
      bijector = Reshape(
          event_shape_out=shape_out,
          event_shape_in=shape_in,
          validate_args=True)
      (x_,
       y_,
      ) = sess.run((
          bijector.inverse(expected_y),
          bijector.forward(expected_x),
      ), feed_dict=feed_dict)
      self.assertAllClose(expected_y, y_, rtol=1e-6, atol=0)
      self.assertAllClose(expected_x, x_, rtol=1e-6, atol=0)
예제 #14
0
  def testInputOutputMismatchOpError(self):
    x1 = np.random.randn(4, 2, 3)
    x2 = np.random.randn(4, 1, 1, 5)

    with self.test_session() as sess:
      shape_in, shape_out, fd_mismatched = self.build_shapes([2, 3],
                                                             [1, 1, 5])
      bijector = Reshape(
          event_shape_out=shape_out,
          event_shape_in=shape_in,
          validate_args=True)

      # test that *all* methods check basic assertions
      with self.assertRaisesError(
          "Input to reshape is a tensor with"):
        sess.run(bijector.forward(x1), feed_dict=fd_mismatched)
      with self.assertRaisesError(
          "Input to reshape is a tensor with"):
        sess.run(bijector.inverse(x2), feed_dict=fd_mismatched)
    def testOneShapePartiallySpecified(self):
        expected_x = np.random.randn(4, 6)
        expected_y = np.reshape(expected_x, [4, 2, 3])

        with self.cached_session() as sess:
            # one of input/output shapes is partially specified
            shape_in, shape_out, feed_dict = self.build_shapes([
                -1,
            ], [2, 3])
            bijector = Reshape(event_shape_out=shape_out,
                               event_shape_in=shape_in,
                               validate_args=True)
            (
                x_,
                y_,
            ) = sess.run((
                bijector.inverse(expected_y),
                bijector.forward(expected_x),
            ),
                         feed_dict=feed_dict)
            self.assertAllClose(expected_y, y_, rtol=1e-6, atol=0)
            self.assertAllClose(expected_x, x_, rtol=1e-6, atol=0)