Mercurial > pylearn
changeset 304:6ead65d30f1e
while learning using __call__, we can now set the early stopper
author | Thierry Bertin-Mahieux <bertinmt@iro.umontreal.ca> |
---|---|
date | Tue, 10 Jun 2008 17:16:49 -0400 |
parents | 410a6ef674ed |
children | 93280a0c151a |
files | mlp_factory_approach.py |
diffstat | 1 files changed, 27 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/mlp_factory_approach.py Tue Jun 10 11:07:20 2008 -0400 +++ b/mlp_factory_approach.py Tue Jun 10 17:16:49 2008 -0400 @@ -5,7 +5,7 @@ from theano import tensor as T import dataset, nnet_ops, stopper, filetensor -from lookup_list import LookupList +from pylearn.lookup_list import LookupList class AbstractFunction (Exception): pass @@ -123,7 +123,7 @@ return theano.gof.PerformLinker() def early_stopper(self): - stopper.NStages(10,1) + stopper.NStages(300,1) def train_iter(self, trainset): raise AbstractFunction @@ -146,12 +146,13 @@ unpack_single=False, optimizer=self.graph.optimizer, linker=self.graph.linker() if hasattr(self.graph, 'linker') - else 'c&py') + else 'c|py') def __call__(self, trainset=None, validset=None, - iparams=None): + iparams=None, + stp=None): """Allocate and optionally train a model @param trainset: Data for minimizing the cost function @@ -166,6 +167,9 @@ @param target: name of field to use as target @type target: string + @param stp: early stopper, if None use default in graphMLP.G + @type stp: None or early stopper + @return: model @rtype: GraphLearner.Model instance @@ -184,17 +188,23 @@ if trainset is not None: #do some training by calling Model.update_minibatch() - stp = self.graph.early_stopper() - for mb in self.graph.train_iter(trainset): - curmodel.update_minibatch(mb) - if stp.set_score: - if validset: - stp.score = curmodel(validset, ['validset_score']) - if (stp.score < stp.best_score): - best = copy.copy(curmodel) - else: - stp.score = 0.0 - stp.next() + if stp == None : + stp = self.graph.early_stopper() + try : + countiter = 0 + for mb in self.graph.train_iter(trainset): + curmodel.update_minibatch(mb) + if stp.set_score: + if validset: + stp.score = curmodel(validset, ['validset_score']) + if (stp.score < stp.best_score): + best = copy.copy(curmodel) + else: + stp.score = 0.0 + countiter +=1 + stp.next() + except StopIteration : + print 'Iterations stopped after ', countiter,' iterations' if validset: curmodel = best return curmodel @@ -278,8 +288,9 @@ def train_iter(self, trainset): return trainset.minibatches(['input', 'target'], - minibatch_size=min(len(trainset), 32), n_batches=300) + minibatch_size=min(len(trainset), 32), n_batches=2000) def early_stopper(self): + """ overwrites GraphLearner.graph function """ return stopper.NStages(300,1) return G()