[文档]classValueNorm(Module):""" 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_shape=input_shapeself.norm_axes=norm_axesself.epsilon=epsilonself.beta=betaself.per_element_update=per_element_updateself.running_mean=ms.Parameter(ops.zeros(input_shape),requires_grad=False)self.running_mean_sq=ms.Parameter(ops.zeros(input_shape),requires_grad=False)self.debiasing_term=ms.Parameter(Tensor(0.0),requires_grad=False)self.reset_parameters()
[文档]defnormalize(self,input_vector):# Make sure input is float32iftype(input_vector)==np.ndarray:input_vector=Tensor(input_vector)mean,var=self.running_mean_var()out=(input_vector-mean[(None,)*self.norm_axes])/ops.sqrt(var)[(None,)*self.norm_axes]returnout
[文档]defdenormalize(self,input_vector):""" Transform normalized data back into original distribution """input_vector=Tensor(input_vector)mean,var=self.running_mean_var()out=input_vector*ops.sqrt(var)[(None,)*self.norm_axes]+mean[(None,)*self.norm_axes]out=out.asnumpy()returnout