Mercurial > pylearn
view sandbox/weights.py @ 480:1babf35fcef5
merged
author | James Bergstra <bergstrj@iro.umontreal.ca> |
---|---|
date | Mon, 27 Oct 2008 17:29:03 -0400 |
parents | 23221eefb70e |
children | 3daabc7f94ff |
line wrap: on
line source
""" Routine to initialize weights. @note: We assume that numpy.random.seed() has already been performed. """ from math import sqrt import numpy.random def random_weights(nin, nout, scale_by=sqrt(3)): """ Generate an initial weight matrix with nin inputs (rows) and nout outputs (cols). Each weight is chosen uniformly at random to be in range: [-scale_by/sqrt(nin), +scale_by/sqrt(nin)] @note: Play with scale_by! Ronan derives scale_by=sqrt(3) because that gives variance of 1 to something (I forget, ask Yoshua for the derivation). However, Ronan got better results by accidentally using scale_by=1. Yoshua hypothesizes this is because the variance will get telescopically smaller as we go up the layers [need more explanation of this argument]. @note: Things may get even trickier if the same weights are being shared in multiple places. """ return (numpy.random.rand(nin, nout) * 2.0 - 1) * scale_by / sqrt(nin)