import tensorflow as tf

                                initializer=tf.random_normal_initializer(stddev=stddev))
            self.b = tf.get_variable('b',[output_dim], initializer=tf.constant_initializer(0.0))

        self.padding = [ [0,0],[k_h//2,k_h//2],[k_w//2,k_w//2],[0,0] ]

    def __call__(self,input_var,name=None,**kwargs):
        _,h,w,c = input_var.shape.as_list()
        _t = tf.image.resize_nearest_neighbor(input_var, [h*2, w*2])
        _t = tf.pad(_t,self.padding, mode='SYMMETRIC')
        return tf.nn.bias_add(
                    tf.nn.conv2d(_t, self.w,
                                 data_format='NHWC', #we can't use cudnn due to resize method...
                                 strides=[1,1,1,1], padding="VALID"),
                    self.b,data_format='NHWC',name=name)
    def get_variables(self):
        return {'w':self.w,'b':self.b}

class WeightNormSymPadConv2d(object): #Resize and Convolution(upsacle by 2)
    def __init__(self,name,input_dim,output_dim,
                 k_h=3,k_w=3,stddev=0.02) :
