I also have a question on this. This is how I am using it at the moment for 
my convolutional layer:  (conv + pool in pool out, pre-activation) 

            self.mean = theano.shared(value=numpy.zeros((channels,),
                             dtype=theano.config.floatX), name = 
'population_mean', borrow = borrow)
            self.var = theano.shared(value=numpy.zeros((nkerns,), 
dtype=theano.config.floatX),
                                     name = 'population_var', 
borrow=borrow)  

            batch_norm_out,_,_,self.mean,self.var = 
batch_normalization_train(
                                                  inputs = pool_out + \
                                                                
self.b.dimshuffle('x', 0, 'x', 'x'),
                                                  gamma = self.gamma,
                                                  beta = self.beta,
                                                  running_mean = self.mean,
                                                  running_var = self.var )

And for inference time, I use the following :

            batch_norm_inference = batch_normalization_test (
                                                    inputs = pool_out + \
                                                                
self.b.dimshuffle('x', 0, 'x', 'x'),
                                                    gamma = self.gamma,
                                                    beta = self.beta,
                                                    mean = self.mean,
                                                    var = self.var  )

The question I have though is on the running mean and variance returned by 
the train method. Is it alright to over-write them the way I have done so ? 
If not should I create a automatic update for the mean and variance update 
such as 

updates [self.mean] = (running mean returned by the train method). 


On Thursday, February 16, 2017 at 8:17:24 PM UTC-7, David Leon wrote:
>
> I'm using nnet.bn.batch_normalization_train() and 
> nnet.bn.batch_normalization_test() for batch normalization, however during 
> test phase, nnet.bn.batch_normalization_test() produces wrong results. For 
> the time being, I just use nnet.bn.batch_normalization_train() with 
> *running_average_factor 
> *set to zero for test phase as:
>
> if deterministic is False:  # train phase
>     normalized, input_mean, input_inv_std, self.mean, self.var = 
> T.nnet.bn.batch_normalization_train(input, self.gamma, self.beta, self.axes,
>                                                                               
>                        self.epsilon, self.alpha, self.mean, self.var)
> else: # test phase
>     # normalized = T.nnet.bn.batch_normalization_test(input, self.gamma, 
> self.beta, self.mean, self.var, self.axes, self.epsilon)
>     normalized, _, _, _, _ = T.nnet.bn.batch_normalization_train(input, 
> self.gamma, self.beta, self.axes, self.epsilon, 0.0, self.mean, self.var)
> return normalized
>
>
>
> My theano version is 
> '0.9.0beta1.dev-b2afa088d1cb416b4507348019af34adae908b73', CUDA 8.0 and 
> CuDNN 5.1
>
>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"theano-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to