AI-LibNeural
view release on metacpan or search on metacpan
LibNeural.xs view on Meta::CPAN
{
/* blank */
RETVAL = new nnwork();
}
else if( items == 2 )
{
/* given a file to load */
char* filename = (char*)SvPV_nolen(ST(1));
RETVAL = new nnwork(filename);
}
else if( items == 4 )
{
/* given node counts */
int inputs = (int)SvIV(ST(1));
int hiddens = (int)SvIV(ST(2));
int outputs = (int)SvIV(ST(3));
RETVAL = new nnwork(inputs, hiddens, outputs);
}
else
Perl_croak(aTHX_ "Usage: Neural::new([ins, hids, outs])");
OUTPUT:
RETVAL
int
nnwork::get_layersize (which)
int which
void
nnwork::train (ins, outs, minerr, trainrate)
SV * ins
SV * outs
float minerr
float trainrate
PREINIT:
int i;
int nin;
int nout;
float * ains;
float * aouts;
CODE:
nin = THIS->get_layersize(INPUT);
nout = THIS->get_layersize(OUTPUT);
ains = svpvav_to_float_array(ins, nin);
aouts = svpvav_to_float_array(outs, nout);
THIS->train(ains, aouts, minerr, trainrate);
if( ains ) free(ains);
if( aouts ) free(aouts);
void
nnwork::run (ins)
SV * ins
PREINIT:
int i;
int nin;
int nout;
float * ains;
float * aouts;
PPCODE:
nin = THIS->get_layersize(INPUT);
nout = THIS->get_layersize(OUTPUT);
ains = svpvav_to_float_array(ins, nin);
aouts = (float*)malloc(nout * sizeof(float));
if( aouts == NULL )
XSRETURN_UNDEF;
THIS->run(ains, aouts);
EXTEND(SP, nout);
for( i = 0; i < nout; i++ )
{
PUSHs(sv_2mortal(newSVnv(aouts[i])));
}
if( ains ) free(ains);
if( aouts ) free(aouts);
int
nnwork::load (filename)
char * filename
int
nnwork::save (filename)
char * filename
( run in 0.839 second using v1.01-cache-2.11-cpan-71847e10f99 )