[文档]classValueNorm:""" Normalize a vector of observations - across the first norm_axes dimensions"""def__init__(self,input_shape,norm_axes=1,beta=0.99999,per_element_update=False,epsilon=1e-5):super(ValueNorm,self).__init__()self.input_shapes=input_shapeself.norm_axes=norm_axesself.epsilon=epsilonself.beta=betaself.per_element_update=per_element_updateself.running_mean=np.zeros(input_shape)self.running_mean_sq=np.zeros(input_shape)self.debiasing_term=np.zeros(1,dtype=np.float32)self.reset_parameters()
[文档]defnormalize(self,input_vector):# Make sure input is float32input_vector=input_vector# not elegant, but works in most casesmean,var=self.running_mean_var()out=(input_vector-mean[(None,)*self.norm_axes])/np.sqrt(var)[(None,)*self.norm_axes]returnout
[文档]defdenormalize(self,input_vector):""" Transform normalized data back into original distribution """input_vector=input_vector# not elegant, but works in most casesmean,var=self.running_mean_var()out=input_vector*np.sqrt(var)[(None,)*self.norm_axes]+mean[(None,)*self.norm_axes]returnout