Exemplo n.º 1
0
 def testGain(self):
   shape = (3, 3, 3, 10, 10)
   for dtype in [dtypes.float32, dtypes.float64]:
     init1 = init_ops.convolutional_orthogonal_3d(seed=1, dtype=dtype)
     init2 = init_ops.convolutional_orthogonal_3d(gain=3.14,
                                                  seed=1, dtype=dtype)
     with self.test_session(graph=ops.Graph(), use_gpu=True):
       t1 = init1(shape).eval()
       t2 = init2(shape).eval()
     return np.allclose(t1, t2 / 3.14, rtol=1e-15, atol=1e-15)
Exemplo n.º 2
0
 def testGain(self):
   shape = (3, 3, 3, 10, 10)
   for dtype in [dtypes.float32, dtypes.float64]:
     init1 = init_ops.convolutional_orthogonal_3d(seed=1, dtype=dtype)
     init2 = init_ops.convolutional_orthogonal_3d(gain=3.14,
                                                  seed=1, dtype=dtype)
     with self.test_session(graph=ops.Graph(), use_gpu=True):
       t1 = init1(shape).eval()
       t2 = init2(shape).eval()
     return np.allclose(t1, t2 / 3.14, rtol=1e-15, atol=1e-15)
Exemplo n.º 3
0
 def testGain(self):
   shape = (3, 3, 3, 10, 10)
   for dtype in [dtypes.float32, dtypes.float64]:
     init1 = init_ops.convolutional_orthogonal_3d(seed=1, dtype=dtype)
     init2 = init_ops.convolutional_orthogonal_3d(gain=3.14,
                                                  seed=1, dtype=dtype)
     with self.session(graph=ops.Graph(), use_gpu=True):
       t1 = init1(shape).eval()
       t2 = init2(shape).eval()
     self.assertAllClose(t1, t2 / 3.14)
Exemplo n.º 4
0
 def testGain(self):
   shape = (3, 3, 3, 10, 10)
   for dtype in [dtypes.float32, dtypes.float64]:
     init1 = init_ops.convolutional_orthogonal_3d(seed=1, dtype=dtype)
     init2 = init_ops.convolutional_orthogonal_3d(gain=3.14,
                                                  seed=1, dtype=dtype)
     with self.session(graph=ops.Graph(), use_gpu=True):
       t1 = init1(shape).eval()
       t2 = init2(shape).eval()
     self.assertAllClose(t1, t2 / 3.14)
Exemplo n.º 5
0
  def testShapesValues(self):
    def circular_pad(input_, width, kernel_size):
      """Padding input_ for computing circular convolution.

      Args:
        input_: the input tensor
        width: the width of the tensor.
        kernel_size: the kernel size of the filter.

      Returns:
        a tensor whose width is (width + kernel_size - 1).
      """

      beginning = kernel_size // 2
      end = kernel_size - 1 - beginning

      tmp_up = array_ops.slice(input_, [0, width - beginning, 0, 0, 0],
                               [-1, beginning, -1, -1, -1])
      tmp_down = array_ops.slice(input_, [0, 0, 0, 0, 0],
                                 [-1, end, -1, -1, -1])
      tmp = array_ops.concat([tmp_up, input_, tmp_down], 1)

      tmp_left = array_ops.slice(tmp, [0, 0, width - beginning, 0, 0],
                                 [-1, -1, beginning, -1, -1])
      tmp_right = array_ops.slice(tmp, [0, 0, 0, 0, 0],
                                  [-1, -1, end, -1, -1])
      tmp = array_ops.concat([tmp_left, tmp, tmp_right], 2)

      tmp_front = array_ops.slice(tmp, [0, 0, 0, width - beginning, 0],
                                  [-1, -1, -1, beginning, -1])
      tmp_back = array_ops.slice(tmp, [0, 0, 0, 0, 0], [-1, -1, -1, end, -1])
      return array_ops.concat([tmp_front, tmp, tmp_back], 3)

    cout = 32
    shape = [1, 7, 7, 7, 16]
    outputs_shape = shape[0:-1] + [cout]
    dtype = dtypes.float32
    tol = 1e-3
    gain = 3.14
    # Check orthogonality/isometry by computing the ratio between
    # the 2-norms of the inputs and outputs.
    for kernel_size in [[1, 1, 1], [2, 2, 2], [3, 3, 3]]:
      convolution = convolutional.conv3d
      inputs = random_ops.random_normal(shape, dtype=dtype)
      inputs_2norm = linalg_ops.norm(inputs)
      input_with_circular_pad = circular_pad(inputs, shape[1], kernel_size[0])
      outputs = convolution(
          input_with_circular_pad, padding="valid", filters=cout,
          kernel_size=kernel_size[0], use_bias=False,
          kernel_initializer=init_ops.convolutional_orthogonal_3d(gain=gain))
      outputs_2norm = linalg_ops.norm(outputs)
      ratio = outputs_2norm / inputs_2norm
      my_ops = variables.global_variables_initializer()
      with self.test_session(use_gpu=True) as sess:
        sess.run(my_ops)
        # Check the shape of the outputs
        t = outputs.eval()
        self.assertAllEqual(t.shape, outputs_shape)
        # Check isometry of the orthogonal kernel.
        self.assertAllClose(sess.run(ratio), np.sqrt(gain), rtol=tol, atol=tol)
Exemplo n.º 6
0
  def testShapesValues(self):
    def circular_pad(input_, width, kernel_size):
      """Padding input_ for computing circular convolution.

      Args:
        input_: the input tensor
        width: the width of the tensor.
        kernel_size: the kernel size of the filter.

      Returns:
        a tensor whose width is (width + kernel_size - 1).
      """

      beginning = kernel_size // 2
      end = kernel_size - 1 - beginning

      tmp_up = array_ops.slice(input_, [0, width - beginning, 0, 0, 0],
                               [-1, beginning, -1, -1, -1])
      tmp_down = array_ops.slice(input_, [0, 0, 0, 0, 0],
                                 [-1, end, -1, -1, -1])
      tmp = array_ops.concat([tmp_up, input_, tmp_down], 1)

      tmp_left = array_ops.slice(tmp, [0, 0, width - beginning, 0, 0],
                                 [-1, -1, beginning, -1, -1])
      tmp_right = array_ops.slice(tmp, [0, 0, 0, 0, 0],
                                  [-1, -1, end, -1, -1])
      tmp = array_ops.concat([tmp_left, tmp, tmp_right], 2)

      tmp_front = array_ops.slice(tmp, [0, 0, 0, width - beginning, 0],
                                  [-1, -1, -1, beginning, -1])
      tmp_back = array_ops.slice(tmp, [0, 0, 0, 0, 0], [-1, -1, -1, end, -1])
      return array_ops.concat([tmp_front, tmp, tmp_back], 3)

    cout = 32
    shape = [1, 7, 7, 7, 16]
    outputs_shape = shape[0:-1] + [cout]
    dtype = dtypes.float32
    tol = 1e-3
    gain = 3.14
    # Check orthogonality/isometry by computing the ratio between
    # the 2-norms of the inputs and outputs.
    for kernel_size in [[1, 1, 1], [2, 2, 2], [3, 3, 3]]:
      convolution = convolutional.conv3d
      inputs = random_ops.random_normal(shape, dtype=dtype)
      inputs_2norm = linalg_ops.norm(inputs)
      input_with_circular_pad = circular_pad(inputs, shape[1], kernel_size[0])
      outputs = convolution(
          input_with_circular_pad, padding="valid", filters=cout,
          kernel_size=kernel_size[0], use_bias=False,
          kernel_initializer=init_ops.convolutional_orthogonal_3d(gain=gain))
      outputs_2norm = linalg_ops.norm(outputs)
      ratio = outputs_2norm / inputs_2norm
      my_ops = variables.global_variables_initializer()
      with self.test_session(use_gpu=True) as sess:
        sess.run(my_ops)
        # Check the shape of the outputs
        t = outputs.eval()
        self.assertAllEqual(t.shape, outputs_shape)
        # Check isometry of the orthogonal kernel.
        self.assertAllClose(sess.run(ratio), np.sqrt(gain), rtol=tol, atol=tol)
Exemplo n.º 7
0
 def testInvalidShape(self):
   init1 = init_ops.convolutional_orthogonal_3d()
   with self.test_session(graph=ops.Graph(), use_gpu=True):
     self.assertRaises(ValueError, init1, shape=[3, 3, 3, 6, 5])
Exemplo n.º 8
0
 def testDuplicatedInitializer(self):
   init = init_ops.convolutional_orthogonal_3d()
   self.assertFalse(duplicated_initializer(self, init, 1, (3, 3, 3, 10, 10)))
Exemplo n.º 9
0
 def testInitializerDifferent(self):
   for dtype in [dtypes.float32, dtypes.float64]:
     init1 = init_ops.convolutional_orthogonal_3d(seed=1, dtype=dtype)
     init2 = init_ops.convolutional_orthogonal_3d(seed=2, dtype=dtype)
     self.assertFalse(identicaltest(self, init1, init2, (3, 3, 3, 10, 10)))
Exemplo n.º 10
0
 def testInvalidShape(self):
   init1 = init_ops.convolutional_orthogonal_3d()
   with self.test_session(graph=ops.Graph(), use_gpu=True):
     self.assertRaises(ValueError, init1, shape=[3, 3, 3, 6, 5])
Exemplo n.º 11
0
 def testDuplicatedInitializer(self):
   init = init_ops.convolutional_orthogonal_3d()
   self.assertFalse(duplicated_initializer(self, init, 1, (3, 3, 3, 10, 10)))
Exemplo n.º 12
0
 def testInitializerDifferent(self):
   for dtype in [dtypes.float32, dtypes.float64]:
     init1 = init_ops.convolutional_orthogonal_3d(seed=1, dtype=dtype)
     init2 = init_ops.convolutional_orthogonal_3d(seed=2, dtype=dtype)
     self.assertFalse(identicaltest(self, init1, init2, (3, 3, 3, 10, 10)))