view pylearn/formulas/noise.py @ 1199:98954d8cb92d

v2planning - modifs to plugin_JB
author James Bergstra <bergstrj@iro.umontreal.ca>
date Mon, 20 Sep 2010 02:56:11 -0400
parents be53f56b37b8
children 0186805a93e7
line wrap: on
line source

"""

This script define the different symbolic noise functions.
The noise contract is simple: noise_lvl is a symbolic variable going from 0 to 1.
0: no changement.
1: max noise.
"""
import theano
import theano.tensor as T
from tags import tags
s="""
* A latex mathematical description of the formulas(for picture representation in generated documentation)
* Tags(for searching):
   * a list of lower lovel fct used
   * category(name of the submodule itself)
* Tell if we did some work to make it more numerical stable. Do theano do the optimization needed?
* Tell if the grad is numericaly stable? Do theano do the optimization needed?
* Tell if work on gpu/not/unknow
* Tell alternate name
* Tell the domaine, range of the input/output(range should use the english notation of including or excluding)
"""

@tags('noise','binomial','salt')
def binomial_noise(theano_rng,inp,noise_lvl):
    """ This add binomial noise to inp. Only the salt part of pepper and salt.

    :type inp: Theano Variable
    :param inp: The input that we want to add noise
    :type noise_lvl: float
    :param noise_lvl: The % of noise. Between 0(no noise) and 1.
    """
    return theano_rng.binomial( size = inp.shape, n = 1, p =  1 - noise_lvl, dtype=theano.config.floatX) * inp


@tags('noise','binomial NLP','pepper','salt')
def pepper_and_salt_noise(theano_rng,inp,noise_lvl):
    """ This add pepper and salt noise to inp
    
    :type inp: Theano Variable
    :param inp: The input that we want to add noise
    :type noise_lvl: tuple(float,float)
    :param noise_lvl: The % of noise for the salt and pepper. Between 0(no noise) and 1.
    """
    return theano_rng.binomial( size = inp.shape, n = 1, p =  1 - noise_lvl[0], dtype=theano.config.floatX) * inp \
                        + (inp==0) * theano_rng.binomial( size = inp.shape, n = 1, p =  noise_lvl[1], dtype=theano.config.floatX)

@tags('noise','gauss','gaussian')
def gaussian_noise(theano_rng,inp,noise_lvl):
    """ This add gaussian NLP noise to inp

    :type inp: Theano Variable
    :param inp: The input that we want to add noise
    :type noise_lvl: float
    :param noise_lvl: The standard deviation of the gaussian.
    """
    return theano_rng.normal( size = inp.shape, std = noise_lvl, dtype=theano.config.floatX) + inp