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 )