Beispiel #1
0
    def decoder(self, x, is_training=True, reuse=False):
        with tf.variable_scope("decoder", reuse=reuse):
            # Layer 1
            net = layers.linear(x,
                                self.linear_dim >> 1,
                                scope='de_fc1',
                                w_initializer=self.w_initializer,
                                b_initializer=self.b_initializer)
            net = tf.nn.relu(net)
            if self.verbose: print(net.shape)

            # Layer 2: Decoder Space
            output_dim = self.input_shape[1] * self.input_shape[
                2] * self.input_shape[3]
            net = layers.linear(x,
                                output_dim,
                                scope='de_fc2',
                                w_initializer=self.w_initializer,
                                b_initializer=self.b_initializer)
            net = tf.nn.sigmoid(net)
            if self.verbose: print(net.shape)

            # Layer 3: Reshaping
            net = tf.reshape(net, self.input_shape, name='main_out')
            if self.verbose: print(net.shape)

            return net
Beispiel #2
0
    def latent_space(self, x, is_training=True, reuse=False):
        with tf.variable_scope("latent_space", reuse=reuse):
            # Layer 2.1: z_mean
            self.z_mean = layers.linear(x,
                                        self.latent_dim,
                                        scope='en_z_mean',
                                        w_initializer=self.w_initializer,
                                        b_initializer=self.b_initializer)
            if self.verbose: print(self.z_mean.shape, end=" || ")

            # Layer 2.2: z_std
            self.z_std = layers.linear(x,
                                       self.latent_dim,
                                       scope='en_z_std',
                                       w_initializer=self.w_initializer,
                                       b_initializer=self.b_initializer)
            self.z_std = tf.nn.sigmoid(self.z_std)
            self.z_std = tf.maximum(self.z_std, 0.001)
            if self.verbose: print(self.z_std.shape)

            # Sampler: Normal (gaussian) random distribution
            shape = tf.shape(self.z_std)
            eps = tf.random_normal(shape, mean=0.0, stddev=1.0, name='epsilon')

            # The reparameterization trick
            self.z = self.z_mean + self.z_std * eps

            return self.z
Beispiel #3
0
    def encoder(self, x, is_training=True, reuse=False):
        with tf.variable_scope("encoder", reuse=reuse):
            if self.verbose: print(x.shape)

            # Layer 1
            net = layers.conv2d(x, self.conv_dim >> 1, name='en_conv1')
            net = tf.nn.leaky_relu(net)
            if self.verbose: print(net.shape)

            # Layer 2
            net = layers.conv2d(net, self.conv_dim, name='en_conv2')
            net = tf.nn.leaky_relu(net)
            if self.verbose: print(net.shape)

            # Layer 3
            net = layers.flatten(net)
            if self.verbose: print(net.shape)

            # Layer 4
            net = layers.linear(net, self.linear_dim, scope='en_fc1')
            net = tf.nn.leaky_relu(net)
            if self.verbose: print(net.shape)

            # Layer 5
            net = layers.linear(net, self.latent_dim, scope='en_fc2')
            net = tf.identity(net)
            if self.verbose: print(net.shape)

            return net
Beispiel #4
0
    def encoder_v2(self, x, is_training=True, reuse=False):
        with tf.variable_scope("encoder_v2", reuse=reuse):
            if self.verbose: print(x.shape)

            # Layer 1
            net = layers.conv2d(x, self.conv_dim >> 1, name='en_conv1')
            net = tf.nn.leaky_relu(net)
            if self.verbose: print(net.shape)

            # Layer 2
            net = layers.conv2d(net, self.conv_dim, name='en_conv2')
            net = layers.batch_norm(net,
                                    is_training=is_training,
                                    scope='en_bn2')
            net = tf.nn.leaky_relu(net)
            if self.verbose: print(net.shape)

            # Layer 3
            net = layers.flatten(net)
            if self.verbose: print(net.shape)

            # Layer 4
            net = layers.linear(net, self.linear_dim, scope='en_fc3')
            net = layers.batch_norm(net,
                                    is_training=is_training,
                                    scope='en_bn3')
            net = tf.nn.leaky_relu(net)
            if self.verbose: print(net.shape)

            # Layer 5
            out_logit = layers.linear(net, self.latent_dim, scope='en_fc4')
            out = tf.nn.sigmoid(out_logit, name="main_out")
            if self.verbose: print(out.shape)

            return out
Beispiel #5
0
    def encoder(self, x, is_training=True, reuse=False):
        with tf.variable_scope("encoder", reuse=reuse):
            if self.verbose: print(x.shape)

            # Layer 0: Flattening
            net = layers.flatten(x)
            if self.verbose: print(net.shape, ": Flatten")

            # Layer 1
            net = layers.linear(net,
                                self.linear_dim,
                                scope='en_fc1',
                                w_initializer=self.w_initializer,
                                b_initializer=self.b_initializer)
            net = tf.nn.tanh(net)
            if self.verbose: print(net.shape)

            # Layer 2
            net = layers.linear(net,
                                self.linear_dim >> 1,
                                scope='en_fc2',
                                w_initializer=self.w_initializer,
                                b_initializer=self.b_initializer)
            net = tf.identity(net, name="main_out")
            if self.verbose: print(net.shape)
            return net
Beispiel #6
0
    def decoder_v2(self, x, is_training=True, reuse=False):
        with tf.variable_scope("decoder", reuse=reuse):
            if self.verbose: print(x.shape)

            # Layer 1
            net = layers.linear(x, self.linear_dim, scope='de_fc1')
            net = layers.batch_norm(net,
                                    is_training=is_training,
                                    scope='de_bn1')
            net = tf.nn.relu(net)
            if self.verbose: print(net.shape)

            # Layer 2
            shape = self.conv_dim * ((self.image_size >> 2)**2)
            net = layers.linear(net, shape, scope='de_fc2')
            net = layers.batch_norm(net,
                                    is_training=is_training,
                                    scope='de_bn2')
            net = tf.nn.relu(net)
            if self.verbose: print(net.shape)

            # Layer 3
            shape = [
                self.batch_size, self.image_size >> 2, self.image_size >> 2,
                self.conv_dim
            ]
            net = tf.reshape(net, shape)
            if self.verbose: print(net.shape)

            # Layer 4
            shape = [
                self.batch_size, self.image_size >> 1, self.image_size >> 1,
                self.conv_dim >> 1
            ]
            net = layers.deconv2d(net, shape, name='de_dc3')
            net = layers.batch_norm(net,
                                    is_training=is_training,
                                    scope='de_bn3')
            net = tf.nn.relu(net)
            if self.verbose: print(net.shape)

            # Layer 5
            shape = [
                self.batch_size, self.image_size, self.image_size,
                self.channels
            ]
            net = layers.deconv2d(net, shape, name='de_dc4')
            out = tf.nn.sigmoid(net, name="main_out")
            if self.verbose: print(out.shape)

            return out
Beispiel #7
0
 def discriminatorVid(self, video, reuse=False):
     with tf.variable_scope('disc_v', reuse=reuse) as vs:
         initial_dim = 64
         d_h0 = dis_block(video, 3, initial_dim, 'block1', reuse=reuse)
         d_h1 = dis_block(d_h0,
                          initial_dim,
                          initial_dim * 2,
                          'block2',
                          reuse=reuse)
         d_h2 = dis_block(d_h1,
                          initial_dim * 2,
                          initial_dim * 4,
                          'block3',
                          reuse=reuse)
         d_h3 = dis_block(d_h2,
                          initial_dim * 4,
                          initial_dim * 8,
                          'block4',
                          reuse=reuse)
         d_h4 = dis_block(d_h3,
                          initial_dim * 8,
                          1,
                          'block5',
                          reuse=reuse,
                          normalize=False)
         d_h5 = linear(tf.reshape(d_h4, [self.batch_size, -1]), 1)
     # variables = tf.contrib.framework.get_variables(vs)
     # return d_h5, variables
     return d_h5
Beispiel #8
0
 def discriminator(self, video, reuse=False):
     with tf.variable_scope('d_', reuse=reuse) as vs:
         initial_dim = 64
         """ CONV BLOCK 1 """
         d_h0 = dis_block_2d(video, 3, initial_dim, 'block1', reuse=reuse)
         """ CONV BLOCK 2 """
         d_h1 = dis_block_2d(d_h0,
                             initial_dim,
                             initial_dim * 2,
                             'block2',
                             reuse=reuse)
         """ CONV BLOCK 3 """
         d_h2 = dis_block_2d(d_h1,
                             initial_dim * 2,
                             initial_dim * 4,
                             'block3',
                             reuse=reuse)
         """ CONV BLOCK 4 """
         d_h3 = dis_block_2d(d_h2,
                             initial_dim * 4,
                             initial_dim * 8,
                             'block4',
                             reuse=reuse)
         """ CONV BLOCK 5 """
         d_h4 = dis_block_2d(d_h3,
                             initial_dim * 8,
                             1,
                             'block5',
                             reuse=reuse,
                             normalize=False)
         """ LINEAR BLOCK """
         d_h5 = linear(tf.reshape(d_h4, [self.batch_size, -1]), 1)
     variables = tf.contrib.framework.get_variables(vs)
     return d_h5, variables
Beispiel #9
0
 def discriminator(self, video, reuse=False):
     with tf.variable_scope('d_', reuse=reuse) as vs:
         initial_dim = self.crop_size
         video = tf.reshape(video, [self.batch_size, self.frame_size, self.crop_size, self.crop_size, self.channels])
         d_h0 = dis_block(video, self.channels, initial_dim, 'block1', reuse=reuse, ddd=True)
         d_h1 = dis_block(d_h0, initial_dim, initial_dim * 2, 'block2', reuse=reuse, ddd=True)
         d_h2 = dis_block(d_h1, initial_dim * 2, initial_dim * 4, 'block3', reuse=reuse, ddd=True)
         d_h3 = dis_block(d_h2, initial_dim * 4, initial_dim * 8, 'block4', reuse=reuse, ddd=True)
         d_h4 = dis_block(d_h3, initial_dim * 8, 1, 'block5', reuse=reuse, normalize=False, ddd=True)
         d_h5 = linear(tf.reshape(d_h4, [self.batch_size, -1]), 1)
     variables = tf.contrib.framework.get_variables(vs)
     return d_h5, variables
Beispiel #10
0
    def generator(self, z):
        with tf.variable_scope('g_') as vs:
            """ LINEAR BLOCK """
            self.z_, _, _ = linear(z, 512 * 4 * 4, 'g_f_h0_lin',
                                   with_w=True)  #512 * 4 * 4 * 2
            self.fg_h0 = tf.reshape(self.z_,
                                    [-1, 4, 4, 512])  #[-1, 2, 4, 4, 512]
            self.fg_h0 = tf.nn.relu(tf.contrib.layers.batch_norm(
                self.fg_h0, scope='g_f_bn0'),
                                    name='g_f_relu0')
            add_activation_summary(self.fg_h0)
            """ CONV BLOCK 1 """
            self.fg_h1 = conv2d_transpose(self.fg_h0,
                                          512, [self.batch_size, 8, 8, 256],
                                          name='g_f_h1')  # 4 frames
            self.fg_h1 = tf.nn.relu(tf.contrib.layers.batch_norm(
                self.fg_h1, scope='g_f_bn1'),
                                    name='g_f_relu1')
            add_activation_summary(self.fg_h1)
            """ CONV BLOCK 2 """
            self.fg_h2 = conv2d_transpose(self.fg_h1,
                                          256, [self.batch_size, 16, 16, 128],
                                          name='g_f_h2')  # 8 frames
            self.fg_h2 = tf.nn.relu(tf.contrib.layers.batch_norm(
                self.fg_h2, scope='g_f_bn2'),
                                    name='g_f_relu2')
            add_activation_summary(self.fg_h2)
            """ CONV BLOCK 3 """
            self.fg_h3 = conv2d_transpose(self.fg_h2,
                                          128, [self.batch_size, 32, 32, 64],
                                          name='g_f_h3')  # 16 frames
            self.fg_h3 = tf.nn.relu(tf.contrib.layers.batch_norm(
                self.fg_h3, scope='g_f_bn3'),
                                    name='g_f_relu3')
            add_activation_summary(self.fg_h3)
            """ CONV BLOCK 4 """
            self.fg_h4 = conv2d_transpose(self.fg_h3,
                                          64, [self.batch_size, 64, 64, 32],
                                          name='g_f_h4')  # 32 frames
            self.fg_h4 = tf.nn.relu(tf.contrib.layers.batch_norm(
                self.fg_h4, scope='g_f_bn4'),
                                    name='g_f_relu4')
            """ CONV BLOCK 5 """

            self.fg_h5 = conv2d_transpose(self.fg_h4,
                                          32, [self.batch_size, 128, 128, 3],
                                          name='g_f_h5')
            self.fg_fg = tf.nn.tanh(self.fg_h5, name='g_f_actvcation')

        variables = tf.contrib.framework.get_variables(vs)
        return self.fg_fg, variables
    def encoder(self,x, is_training=True, reuse=False):
        with tf.variable_scope("encoder", reuse=reuse):
            if self.verbose: print(x.shape)

            # Encoder Space
            net = layers.flatten(x)
            if self.verbose: print(net.shape,": Flatten")

            # Latent Space
            net = layers.linear(net, self.latent_dim, scope = 'en_fc1',
                                w_initializer = self.w_initializer,
                                b_initializer = self.b_initializer)
            net = tf.nn.relu(net, name = "main_out")
            if self.verbose: print(net.shape)

            return net
Beispiel #12
0
    def __call__(self, inputs, attrs, training=True, batch_size=100):

        if training == False:
            self.batch_size = 10
        print('batchsize', batch_size)
        with tf.variable_scope(self.name, reuse=self.reuse):
            with tf.variable_scope('fc1'):

                #w = self.input_shape[0] // (2 ** 3)
                #x = tf.concat([inputs, attrs], axis=-1)

                x = inputs

                self.z_, _, _ = linear(x,
                                       512 * 4 * 4,
                                       'g_f_h0_lin',
                                       with_w=True)  # 4*4

                self.fg_h0 = tf.reshape(self.z_, [-1, 4, 4, 512])

                self.fg_h0 = tf.nn.relu(tf.contrib.layers.batch_norm(
                    self.fg_h0, scope='g_f_bn0'),
                                        name='g_f_relu0')
                '''
                x = tf.layers.dense(x, w * w * 256)
                x = tf.layers.batch_normalization(x, training=training)
                x = tf.nn.relu(x)
                x = tf.reshape(x, [-1, w, w, 256])
                '''

            with tf.variable_scope('conv1'):
                self.fg_h1 = conv2d_transpose(self.fg_h0,
                                              512, [batch_size, 8, 8, 256],
                                              name='g_f_h1')
                self.fg_h1 = tf.nn.relu(tf.contrib.layers.batch_norm(
                    self.fg_h1, scope='g_f_bn1'),
                                        name='g_f_relu1')
                '''
                x = tf.layers.conv2d_transpose(x, 256, (5, 5), (2, 2), 'same')
                x = tf.layers.batch_normalization(x, training=training)
                x = lrelu(x)
                '''

            with tf.variable_scope('conv2'):
                self.fg_h2 = conv2d_transpose(self.fg_h1,
                                              256, [batch_size, 16, 16, 128],
                                              name='g_f_h2')
                self.fg_h2 = tf.nn.relu(tf.contrib.layers.batch_norm(
                    self.fg_h2, scope='g_f_bn2'),
                                        name='g_f_relu2')
                '''
                x = tf.layers.conv2d_transpose(x, 128, (5, 5), (2, 2), 'same')
                x = tf.layers.batch_normalization(x, training=training)
                x = lrelu(x)
                '''
            with tf.variable_scope('conv3'):
                self.fg_h3 = conv2d_transpose(self.fg_h2,
                                              128, [batch_size, 32, 32, 64],
                                              name='g_f_h3')
                self.fg_h3 = tf.nn.relu(tf.contrib.layers.batch_norm(
                    self.fg_h3, scope='g_f_bn3'),
                                        name='g_f_relu3')
                '''
                x = tf.layers.conv2d_transpose(x, 64, (5, 5), (2, 2), 'same')
                x = tf.layers.batch_normalization(x, training=training)
                x = lrelu(x)
                '''

            with tf.variable_scope('conv4'):
                self.fg_h4 = conv2d_transpose(self.fg_h3,
                                              64, [batch_size, 64, 64, 3],
                                              name='g_f_h4')
                self.fg_fg = tf.nn.tanh(self.fg_h4, name='g_f_actvcation')
                '''
                d = self.input_shape[2]
                x = tf.layers.conv2d_transpose(x, d, (5, 5), (1, 1), 'same')
                x = tf.tanh(x)
                '''

        self.variables = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES,
                                           scope=self.name)
        self.reuse = True

        return self.fg_fg
Beispiel #13
0
    def __call__(self, inputs, training=True, reuse=False, batchsize=100):
        self.batch_size = batchsize
        if training == False:
            self.batch_size = 10

        with tf.variable_scope(self.name, reuse=tf.AUTO_REUSE):

            initial_dim = 64
            """ CONV BLOCK 1 """
            d_h0 = dis_block_2d(inputs, 3, initial_dim, 'block1', reuse=reuse)
            """ CONV BLOCK 2 """
            d_h1 = dis_block_2d(d_h0,
                                initial_dim,
                                initial_dim * 2,
                                'block2',
                                reuse=reuse)
            """ CONV BLOCK 3 """
            d_h2 = dis_block_2d(d_h1,
                                initial_dim * 2,
                                initial_dim * 4,
                                'block3',
                                reuse=reuse)
            """ CONV BLOCK 4 """
            d_h3 = dis_block_2d(d_h2,
                                initial_dim * 4,
                                initial_dim * 8,
                                'block4',
                                reuse=reuse)
            """ CONV BLOCK 5 """
            d_h4 = dis_block_2d(d_h3,
                                initial_dim * 8,
                                1,
                                'block5',
                                reuse=reuse,
                                normalize=False)
            print(d_h4.shape)  #(batch*2*2*1)
            """ LINEAR BLOCK """
            f = tf.reshape(d_h4, [self.batch_size, -1])  #similar to wgantest
            #(batch,1) d_h5
            print("f", f.shape)
            d_h5 = linear(tf.reshape(d_h4, [self.batch_size, 4]),
                          1)  #batch_size =100 assign shape=2*2=4
            y = d_h5  # original y is useless in wgan, use d_h5 instead
            '''
            #print("conv4",x.shape)
            
            with tf.variable_scope('global_avg'):
                x = tf.reduce_mean(x, axis=[1, 2])
            #print("avg",x.shape)
             
            with tf.variable_scope('fc1'):
                f = tf.contrib.layers.flatten(x)
                y = tf.layers.dense(f, 1)
            '''
            #print("y",y.shape)
            #print("f",f.shape)

        self.variables = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES,
                                           scope=self.name)
        self.reuse = True

        return y, f, d_h5
Beispiel #14
0
    def decoder(self, x, is_training=True, reuse=False):
        with tf.variable_scope("decoder", reuse=reuse):
            net = layers.linear(x,
                                self.latent_dim << 1,
                                scope='de_fc1',
                                w_initializer=self.w_initializer,
                                b_initializer=self.b_initializer)
            net = tf.nn.relu(net)
            if self.verbose: print(net.shape)

            net = layers.linear(net,
                                self.latent_dim << 2,
                                scope='de_fc2',
                                w_initializer=self.w_initializer,
                                b_initializer=self.b_initializer)
            net = tf.nn.relu(net)
            if self.verbose: print(net.shape)

            out_dim = self.main_shape[1] * self.main_shape[
                2] * self.main_shape[3]
            net = layers.linear(net,
                                out_dim,
                                scope='de_fc3',
                                w_initializer=self.w_initializer,
                                b_initializer=self.b_initializer)
            net = tf.nn.relu(net)
            if self.verbose: print(net.shape)

            net = tf.reshape(net, self.main_shape)
            if self.verbose: print(net.shape)

            # net = tf.keras.layers.Conv2DTranspose(filters = 16,
            #                                      kernel_size = [5,5],
            #                                      strides=4,
            #                                      padding='same',
            #                                      kernel_initializer='glorot_uniform')(net)
            # if self.verbose: print(net.shape)

            # net = tf.keras.layers.UpSampling2D((2, 2))(net)
            # if self.verbose: print(net.shape)

            net = tf.keras.layers.Conv2DTranspose(
                filters=32,
                kernel_size=[5, 5],
                strides=2,
                padding='same',
                kernel_initializer='glorot_uniform')(net)
            if self.verbose: print(net.shape)

            # net = tf.keras.layers.UpSampling2D((2, 2))(net)
            # if self.verbose: print(net.shape)

            net = tf.keras.layers.Conv2DTranspose(
                filters=3,
                kernel_size=[5, 5],
                strides=2,
                padding='same',
                kernel_initializer='glorot_uniform')(net)
            if self.verbose: print(net.shape)

            ## net = tf.keras.layers.UpSampling2D((2, 2))(net)
            # if self.verbose: print(net.shape)

            net = tf.sigmoid(net, name='main_out')

            return net
Beispiel #15
0
    def encoder(self, x, is_training=True, reuse=False):
        with tf.variable_scope("encoder", reuse=reuse):
            if self.verbose: print(x.shape)

            net = tf.keras.layers.Conv2D(
                filters=32,
                kernel_size=[5, 5],
                strides=2,
                padding='same',
                kernel_initializer='glorot_uniform')(x)
            if self.verbose: print(net.shape)

            # net = tf.keras.layers.MaxPooling2D((2, 2), padding='same')(net)
            # if self.verbose: print(net.shape)

            net = tf.keras.layers.Conv2D(
                filters=16,
                kernel_size=[5, 5],
                strides=2,
                padding='same',
                kernel_initializer='glorot_uniform')(net)
            if self.verbose: print(net.shape)

            # net = tf.keras.layers.MaxPooling2D((2, 2), padding='same')(net)
            # if self.verbose: print(net.shape)

            # net = tf.keras.layers.Conv2D(filters    = 8,
            #                             kernel_size = [5,5],
            #                             strides     = 4,
            #                             padding     = 'same',
            #                             kernel_initializer='glorot_uniform')(net)
            # if self.verbose: print(net.shape)
            self.main_shape = [
                -1,
                int(net.shape[1]),
                int(net.shape[2]),
                int(net.shape[3])
            ]  # will be used by the decoder

            # net = tf.keras.layers.MaxPooling2D((2, 2), padding='same')(net)
            # if self.verbose: print(net.shape)

            net = layers.flatten(net)
            if self.verbose: print(net.shape)

            net = layers.linear(net,
                                self.latent_dim << 2,
                                scope='en_fc1',
                                w_initializer=self.w_initializer,
                                b_initializer=self.b_initializer)
            net = tf.nn.relu(net)
            if self.verbose: print(net.shape)

            net = layers.linear(net,
                                self.latent_dim << 1,
                                scope='en_fc2',
                                w_initializer=self.w_initializer,
                                b_initializer=self.b_initializer)
            net = tf.nn.relu(net)
            if self.verbose: print(net.shape)

            net = layers.linear(net,
                                self.latent_dim,
                                scope='en_fc3',
                                w_initializer=self.w_initializer,
                                b_initializer=self.b_initializer)
            net = tf.nn.relu(net, name='main_out')
            if self.verbose: print(net.shape)

            return net