[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Scripts



I did not work the new init issue but have attached some scripts.
I would like to see more on scripts in general. PDP is a very powerful
platform and it is nice to control via a script for multiple runs, etc.

check the New method out..





Apr 2002 SweetEz@aol.com wrote:

> Date: Sat, 27 Apr 2002 13:33:33 EDT
> From: SweetEz@aol.com
> To: pdp-discuss@psych.colorado.edu
> Subject: Scripts
>
> Hi
> I am trying to write a script in order to run the same test on a model
> multiple times but with NEW INIT each time. And after each time its trained,
> I would like to test it and have the results recorded in a text log (and into
> a text file). Also after that, I would like to do the same for a different
> number of train max. Is there a way to write a script to do that? I am pretty
> new at working pdp and I would appreciate any guidance. Thank you very much
> for your time.
>

-  ___________.___________________.________
- < Al Piszcz | apiszcz@mitre.org | MITRE  >
//
// Step through 4 events with 1 second wait 
//
void Run4Tests () {
  int i;
  for (i=0; i<4; i++) {
  .projects[0].processes[3].Step();
  .projects[0].networks[0].views[0].shape = NetView::AREA; 
  .projects[0].networks[0].views[0].unit_text = NetView::VALUES;
  cout << "TEST: " << i << endl;
  sleep(1);
  }
}
/////////////////////////////////////////////////////////////////////////
// PDP CSS SCRIPT
// Parallel Distributed Processing, C Super-Script, Language
//
// Author: Al Piszcz
//
// SAMPLE PROBLEM IS logical OR
// Events: 00->0, 01->1, 10->1, 11->1
//
/////////////////////////////////////////////////////////////////////////
//
// CREATES THE NETWORK 
//
  .projects->New(1, Project);
  .projects[0].networks->New(1, Network);
  .projects[0].networks[0].layers->New(3, Layer);
  .projects[0].networks[0].layers[0].geom = "{x=0: y=1: z=1: }";
  .projects[0].networks[0].layers[0].UpdateAfterEdit();
  .projects[0].networks[0].layers[0].geom = "{x=0: y=1: z=1: }";
  .projects[0].networks[0].layers[0].UpdateAfterEdit();
  { Layer* ths = .projects[0].networks[0].layers[0];
  	ths->n_units = "2";
  }
  { Layer* ths = .projects[0].networks[0].layers[1];
  	ths->n_units = "2";
  }
  { Layer* ths = .projects[0].networks[0].layers[2];
  	ths->n_units = "1";
  }
  .projects[0].networks[0].layers[2].units->New(1, BpUnit);
  .projects[0].networks[0].layers[1].units->New(2, BpUnit);
  .projects[0].networks[0].layers[0].units->New(2, BpUnit);
  .projects[0].networks[0].layers[1].projections.New(1);
  .projects[0].networks[0].layers[1].projections[0].from_type = Projection::CUSTOM;
  .projects[0].networks[0].layers[1].projections[0].from = .projects[0].networks[0].layers[0];
  .projects[0].networks[0].layers[2].projections.New(1);
  .projects[0].networks[0].layers[2].projections[0].from_type = Projection::CUSTOM;
  .projects[0].networks[0].layers[2].projections[0].from = .projects[0].networks[0].layers[1];
  .projects[0].networks[0].Connect();
//
  // CREATES THE ENVIRONMENT EVENT PATTERNS
//
.projects[0].environments->New(1, Environment);
.projects[0].environments[0].events->New(4, Event);
.projects[0].environments[0].views[0].InitDisplay();
{ float_RArray* ths = .projects[0].environments[0].events[0].patterns[0]->value;
  ths = "{0,0,}";
}
{ float_RArray* ths = .projects[0].environments[0].events[0].patterns[1]->value;
  ths = "{0,}";
}
{ float_RArray* ths = .projects[0].environments[0].events[1].patterns[0]->value;
  ths = "{1,0,}";
}
{ float_RArray* ths = .projects[0].environments[0].events[1].patterns[1]->value;
  ths = "{1,}";
}
{ float_RArray* ths = .projects[0].environments[0].events[2].patterns[0]->value;
  ths = "{0,1,}";
}
{ float_RArray* ths = .projects[0].environments[0].events[2].patterns[1]->value;
  ths = "{1,}";
}
{ float_RArray* ths = .projects[0].environments[0].events[3].patterns[0]->value;
  ths = "{1,1,}";
}
{ float_RArray* ths = .projects[0].environments[0].events[3].patterns[1]->value;
  ths = "{1,}";
}

//
// CREATES TRAINING OBJECT 
//
  .projects[0].processes->New(1, TrainProcess);
  .projects[0].processes[0].CreateSubProcs();
  .projects[0].processes[1].CreateSubProcs();
  .projects[0].processes[2].CreateSubProcs();

//
// CREATES EPOCH OBJECT 
//
  .projects[0].processes->New(1, EpochProcess);
  .projects[0].processes[3].CreateSubProcs();
  .projects[0].processes[4].CreateSubProcs();

//
// CREATES CONTROL PANELS, Training, EPOCH
//
  .projects[0].processes[0]->ControlPanel();
  .projects[0].processes[3]->ControlPanel();

//
// NETWORK VIEW, enable activation value view
//
  .projects[0].networks[0].views[0].SelectVar("act");
  .projects[0].networks[0].views[0].shape = NetView::AREA;


//
// CREATE LOG OF Training EPOCH 0 Layer 2 
//
  .projects[0].logs->New(1, GraphLog);
  .projects[0].logs[0].AddUpdater(.projects[0].processes[1]);
  .projects[0].logs[0]->ViewWindow();

//
// Setup a monitor stat to log activation value for layer 2
//
  { MonitorStat* ths = .projects[0].processes[4].final_stats.NewEl(1,MonitorStat);
    ths->variable = "act";
    ths->net_agg.op = "COPY";
    ths->objects.LinkUnique(.projects[0].networks[0].layers[2]);
    ths->UpdateAfterEdit();
  }

//
// CREATE LOG OF Trial EPOCH 1 Layer 2 
//
  .projects[0].logs->New(1, GridLog);
  .projects[0].logs[1].views->New(1, TextLogView);
  .projects[0].logs[1].AddUpdater(.projects[0].processes[4]);
  .projects[0].logs[1]->ViewWindow();



//
// CONTROL PANEL START TRAINING 
// Setup up EPOCHS
//
  .projects[0].processes[0].epoch.max=300;
  .projects[0].processes[0].Run();

//
// LOGGING , note to find that SetSaveFile has a second paraemter
// at CSS prompt> type PDPLog
// NOTE documentation only describe the file name
//
  .projects[0].logs[1].SetSaveFile("/export/home/apiszcz/pdpw/logfs.log", 'true');
  .projects[0].logs[1].BufferToFile();

//
// LOAD AND COMPILE C++ FUNCTION to TEST trial events 
//
#include "Run4Tests.css"
Run4Tests();