PLearn 0.1
|
#include <plearn/var/Var_all.h>
#include <plearn/var/NaryVariable.h>
#include <plearn/var/Func.h>
#include <plearn/opt/GradientOptimizer.h>
#include <plearn/var/VarArray.h>
#include <plearn/db/databases.h>
#include <plearn/math/random.h>
Go to the source code of this file.
Functions | |
int | main () |
int main | ( | ) |
Definition at line 14 of file simplenet.cc.
References PLearn::affine_transform(), PLearn::GradientOptimizer::build(), PLearn::classification_loss(), PLearn::Optimizer::cost, PLearn::endl(), PLearn::fill_random_uniform(), PLearn::VecStatsCollector::getMean(), PLearn::hconcat(), i, PLearn::VMat::length(), PLearn::loadLetters(), PLearn::meanOf(), PLearn::PLearnError::message(), PLearn::neg_log_pi(), PLearn::Optimizer::nstages, PLearn::GradientOptimizer::optimizeN(), PLearn::Optimizer::params, PLearn::pout, PLearn::softmax(), PLearn::sqrt(), PLearn::GradientOptimizer::start_learning_rate, PLearn::tanh(), and PLearn::VMat::width().
{ try { // Implantation simplenet de Pascal // cout << "tanh: " << ultrafasttanh(1) << " " << fasttanh(1) << " " << tanh(1) << endl; int nhidden = 100; int nepochs = 10; VMat trainset = loadLetters(); int nclasses = 26; int inputsize = trainset.width()-1; cout << "Letters: " << trainset.length() << " samples, " << nclasses << " classes, " << inputsize << " inputs, " << nhidden << " hidden" << endl; Var input(inputsize); Var classnum(1); Var w1(1+inputsize, nhidden); // fill_random_normal(w1->matValue.subMatRows(1,inputsize), 0., 1./sqrt( real(inputsize) )); fill_random_uniform(w1->value, -1./sqrt(real(inputsize)), +1./sqrt(real(inputsize))); Var hidden = tanh(affine_transform(input,w1)); Var w2(1+nhidden, nclasses); // fill_random_normal(w2->matValue.subMatRows(1,nhidden), 0., 1./sqrt(real(nhidden))); fill_random_uniform(w2->value, -1./sqrt(real(nhidden)), +1./sqrt(real(nhidden))); // Var output = sigmoid(affine_transform(hidden,w2)); // Var cost = onehot_squared_loss(output, classnum, 0, 1); Var output = softmax(affine_transform(hidden,w2)); Var cost = neg_log_pi(output,classnum); VarArray params = w1&w2; Var classerror = classification_loss(output, classnum); Var totalcost = meanOf(trainset, Func(input&classnum, hconcat(cost&classerror)), 1); // GradientOptimizer opt(params, totalcost, 0.01, 0.00, trainset.length()*nepochs, "simplenet.log", trainset.length()); GradientOptimizer opt; opt.params = params; opt.cost = totalcost; opt.start_learning_rate = 1e-2; opt.nstages = trainset.length(); opt.build(); for (int i = 0; i < nepochs; i++) { VecStatsCollector statscol; opt.optimizeN(statscol); pout << (i + 1) * trainset->length() << " " << statscol.getMean() << endl; } cout << "FINISHED." << endl; return 0; } catch(const PLearnError& err) { cerr << "FATAL ERROR: " << err.message() << endl; } return 1; }