import tensorflow as tf

            return X

    def conv(self, id, input, channels, size=3, stride=1, use_bias=True, padding="SAME", init_stddev=-1.0, dilation=1):

        assert padding in ["SAME", "VALID", "REFLECT", "PARTIAL"], 'valid paddings: "SAME", "VALID", "REFLECT", "PARTIAL"'
        if type(size) == int: size = [size, size]
        if init_stddev <= 0.0:
            init = tf.contrib.layers.variance_scaling_initializer(dtype=tf.float32)
        else:
            init = tf.truncated_normal_initializer(stddev=init_stddev)

        if padding == "PARTIAL":
            with tf.variable_scope('mask'):
                _, h, w, _ = input.get_shape().as_list()

                slide_window = size[0] * size[1]
                mask = tf.ones(shape=[1, h, w, 1])
                update_mask = tf.layers.conv2d(mask, filters=1, dilation_rate=(dilation, dilation), name='mask' + id,
