import tensorflow as tf

            self.padding = padding

            self.epsilon = epsilon

    def __call__(self,input_var,name=None,**kwargs) :
        def _init():
            v_norm = tf.nn.l2_normalize(self.v,axis=[0,1,2])
            t = tf.nn.conv2d(input_var,v_norm,self.strides,self.padding,data_format='NHWC')
            mu,var = tf.nn.moments(t,axes=[0,1,2])
            std = tf.sqrt(var+self.epsilon)
            return [tf.assign(self.g,1/std),tf.assign(self.b,-1.*mu/std)]

        require_init = tf.reduce_any(tf.is_nan(self.g))
        init_ops = tf.cond(require_init,_init,lambda : [self.g,self.b])

        with tf.control_dependencies(init_ops):
            w = tf.reshape(self.g,[1,1,1,tf.shape(self.v)[-1]]) * tf.nn.l2_normalize(self.v,axis=[0,1,2])
            return tf.nn.bias_add(
