import tensorflow as tf

        init = tf.truncated_normal_initializer(mean=0.0, stddev=0.02)
        filters = tf.get_variable('zero_conv_weights' + id, initializer=init, shape=[size[0], size[1], in_ch, channels])
        filters = filters - tf.reduce_mean(filters, axis=[0, 1, 2], keepdims=True)

        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, name='mask' + id,
                                            kernel_size=size, kernel_initializer=tf.constant_initializer(1.0),
                                            strides=stride, padding="SAME", use_bias=False, trainable=False,
                                            dilation_rate=(dilation, dilation))
                mask_ratio = slide_window / (update_mask + 1e-8)
                update_mask = tf.clip_by_value(update_mask, 0.0, 1.0)
                mask_ratio = mask_ratio * update_mask

