Exemplo n.º 1
0
    def pad_conv3d_lrelu(self, activations, n_filters, kernel_size, strides,
                         scope):
        """Pad, apply 3-D convolution and leaky relu."""
        padding = [[0, 0], [1, 1], [1, 1], [1, 1], [0, 0]]

        # tf.nn.conv3d accepts a list of 5 values for strides
        # with first and last value equal to 1
        if isinstance(strides, numbers.Integral):
            strides = [strides] * 3
        strides = [1] + strides + [1]

        # Filter_shape = [K, K, K, num_input, num_output]
        filter_shape = ([kernel_size] * 3 + activations.shape[-1:].as_list() +
                        [n_filters])

        with tf.variable_scope(scope, reuse=tf.AUTO_REUSE):
            conv_filter = tf.get_variable(
                "conv_filter",
                shape=filter_shape,
                initializer=tf.truncated_normal_initializer(stddev=0.02))

            if self.hparams.use_spectral_norm:
                conv_filter, assign_op = common_layers.apply_spectral_norm(
                    conv_filter)
                if self.is_training:
                    tf.add_to_collection(tf.GraphKeys.UPDATE_OPS, assign_op)

            padded = tf.pad(activations, padding)
            convolved = tf.nn.conv3d(padded,
                                     conv_filter,
                                     strides=strides,
                                     padding="VALID")
            rectified = tf.nn.leaky_relu(convolved, alpha=0.2)
        return rectified
Exemplo n.º 2
0
  def testSpectralNorm(self):
    # Test that after 20 calls to apply_spectral_norm, the spectral
    # norm of the normalized matrix is close to 1.0
    with tf.Graph().as_default():
      weights = tf.get_variable("w", dtype=tf.float32, shape=[2, 3, 50, 100])
      weights = tf.multiply(weights, 10.0)
      normed_weight, assign_op = common_layers.apply_spectral_norm(weights)

      with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())

        for _ in range(20):
          sess.run(assign_op)
          normed_weight, assign_op = common_layers.apply_spectral_norm(
              weights)
        normed_weight = sess.run(normed_weight).reshape(-1, 100)
        _, s, _ = np.linalg.svd(normed_weight)
        self.assertTrue(np.allclose(s[0], 1.0, rtol=0.1))
Exemplo n.º 3
0
  def testSpectralNorm(self):
    # Test that after 20 calls to apply_spectral_norm, the spectral
    # norm of the normalized matrix is close to 1.0
    with tf.Graph().as_default():
      weights = tf.get_variable("w", dtype=tf.float32, shape=[2, 3, 50, 100])
      weights = tf.multiply(weights, 10.0)
      normed_weight, assign_op = common_layers.apply_spectral_norm(weights)

      with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())

        for _ in range(20):
          sess.run(assign_op)
          normed_weight, assign_op = common_layers.apply_spectral_norm(
              weights)
        normed_weight = sess.run(normed_weight).reshape(-1, 100)
        _, s, _ = np.linalg.svd(normed_weight)
        self.assertTrue(np.allclose(s[0], 1.0, rtol=0.1))