[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();