def conv2d( inputs , outputs_dim , kernel_size , stride , padding = "SAME" , he_init = False , activation_fn = None , regularization_scale = 0.0 ):
C = inputs.get_shape()[-1].value
fan_in = C * kernel_size**2
fan_out = C * kernel_size**2 / stride**2
avg_fan = (fan_in + fan_out) / 2
if he_init:
var = 2.0/avg_fan
else :
var = 1.0/avg_fan
# var = (b - a)**2 / 12 , b==-a , (zero mean)
upper_bound = np.sqrt( 12.0*var ) * 0.5
weights_initializer = tf.random_uniform_initializer( -upper_bound , upper_bound , seed = None , dtype = tf.float32 )
weights_regularizer = layers.l2_regularizer( scale = regularization_scale )
return layers.conv2d( inputs = inputs , num_outputs = outputs_dim , kernel_size = kernel_size , stride = stride, padding = "SAME" , activation_fn = activation_fn , weights_initializer = weights_initializer , weights_regularizer = weights_regularizer )
评论列表
文章目录