def generator(self, z, y=None, share_params=False, reuse=False, name=""):
        x = t.dense(z, self.fc_g_unit, reuse=share_params, name='gen-fc-1')
        x = t.batch_norm(x, reuse=share_params, name='gen-bn-1')
        x = t.prelu(x, reuse=share_params, name='gen-prelu-1')

        x = t.dense(x, self.gf_dim * 8 * 7 * 7, reuse=share_params, name='gen-fc-2')
        x = t.batch_norm(x, reuse=share_params, name='gen-bn-2')
        x = t.prelu(x, reuse=share_params, name='gen-prelu-2')

        x = tf.reshape(x, (-1, 7, 7, self.gf_dim * 8))

        for i in range(1, 3):
            x = t.deconv2d(x, f=self.gf_dim * 4 // i, k=3, s=2, reuse=share_params, name='gen-deconv2d-%d' % i)
            x = t.batch_norm(x, reuse=share_params, name="gen-bn-%d" % (i + 2))
            x = t.prelu(x, reuse=share_params, name='gen-prelu-%d' % (i + 2))

        """
        x = z  # tf.concat([z, y], axis=1)

        loop = 5
        for i in range(1, loop):
            x = t.dense(x, self.fc_g_unit, reuse=share_params, name='gen-fc-%d' % i)
            x = t.batch_norm(x, reuse=share_params, name='gen-bn-%d' % i)
            x = t.prelu(x, reuse=share_params, name='gen-prelu-%d' % i)
        """

        with tf.variable_scope("generator-%s" % name, reuse=reuse):
            x = t.deconv2d(x, f=self.channel, k=6, s=1, reuse=False, name='gen-' + name + '-deconv2d-3')
            x = tf.nn.sigmoid(x, name='gen' + name + '-sigmoid-1')
            """
            x = t.dense(x, self.n_input, reuse=False, name='gen-' + name + '-fc-%d' % loop)
            x = tf.nn.sigmoid(x)
            """

        return x
Beispiel #2
0
    def generator(self, x, reuse=None, is_train=True):
        """
        :param x: LR (Low Resolution) images, (-1, 96, 96, 3)
        :param reuse: scope re-usability
        :param is_train: is trainable, default True
        :return: SR (Super Resolution) images, (-1, 384, 384, 3)
        """

        with tf.variable_scope("generator", reuse=reuse):

            def residual_block(x, f, name="", _is_train=True):
                with tf.variable_scope(name):
                    shortcut = tf.identity(x, name='n64s1-shortcut')

                    x = t.conv2d(x, f, 3, 1, name="n64s1-1")
                    x = t.batch_norm(x, is_train=_is_train, name="n64s1-bn-1")
                    x = t.prelu(x, reuse=reuse, name='n64s1-prelu-1')
                    x = t.conv2d(x, f, 3, 1, name="n64s1-2")
                    x = t.batch_norm(x, is_train=_is_train, name="n64s1-bn-2")
                    x = tf.add(x, shortcut)

                    return x

            x = t.conv2d(x, self.gf_dim, 9, 1, name='n64s1-1')
            x = t.prelu(x, name='n64s1-prelu-1')

            skip_conn = tf.identity(x, name='skip_connection')

            # B residual blocks
            for i in range(1, 17):  # (1, 9)
                x = residual_block(x,
                                   self.gf_dim,
                                   name='b-residual_block_%d' % i,
                                   _is_train=is_train)

            x = t.conv2d(x, self.gf_dim, 3, 1, name='n64s1-3')
            x = t.batch_norm(x, is_train=is_train, name='n64s1-bn-3')

            x = tf.add(x, skip_conn)

            # sub-pixel conv2d blocks
            for i in range(1, 3):
                x = t.conv2d(x,
                             self.gf_dim * 4,
                             3,
                             1,
                             name='n256s1-%d' % (i + 2))
                x = t.sub_pixel_conv2d(x, f=None, s=2)
                x = t.prelu(x, name='n256s1-prelu-%d' % i)

            x = t.conv2d(x, self.channel, 9, 1,
                         name='n3s1')  # (-1, 384, 384, 3)
            x = tf.nn.tanh(x)
            return x
Beispiel #3
0
            def residual_block(x, f, name="", _is_train=True):
                with tf.variable_scope(name):
                    shortcut = tf.identity(x, name='n64s1-shortcut')

                    x = t.conv2d(x, f, 3, 1, name="n64s1-1")
                    x = t.batch_norm(x, is_train=_is_train, name="n64s1-bn-1")
                    x = t.prelu(x, reuse=reuse, name='n64s1-prelu-1')
                    x = t.conv2d(x, f, 3, 1, name="n64s1-2")
                    x = t.batch_norm(x, is_train=_is_train, name="n64s1-bn-2")
                    x = tf.add(x, shortcut)

                    return x
    def discriminator(self, x, y=None, share_params=False, reuse=False, name=""):
        with tf.variable_scope("discriminator-%s" % name, reuse=reuse):
            x = tf.reshape(x, (-1, self.height, self.width, self.channel))

            x = t.conv2d(x, f=self.df_dim * 1, k=5, s=2, reuse=False, name='disc-' + name + '-conv2d-1')
            x = t.prelu(x, reuse=False, name='disc-' + name + '-prelu-1')
            # x = tf.layers.max_pooling2d(x, pool_size=2, strides=2, padding='SAME',
            #                             name='disc-' + name + '-max_pool2d-1')

            x = t.conv2d(x, f=self.df_dim * 2, k=5, s=2, reuse=False, name='disc-' + name + '-conv2d-2')
            x = t.batch_norm(x, reuse=False, name='disc-' + name + '-bn-1')
            x = t.prelu(x, reuse=False, name='disc-' + name + '-prelu-2')
            # x = tf.layers.max_pooling2d(x, pool_size=2, strides=2, padding='SAME',
            #                             name='disc-' + name + '-max_pool2d-2')

            x = tf.layers.flatten(x)

        x = t.dense(x, self.fc_d_unit, reuse=share_params, name='disc-fc-1')
        x = t.batch_norm(x, reuse=share_params, name='disc-bn-2')
        x = t.prelu(x, reuse=share_params, name='disc-prelu-3')

        x = t.dense(x, 1, reuse=share_params, name='disc-fc-2')
        return x