AI-FANN

 view release on metacpan or  search on metacpan

FANN.xs  view on Meta::CPAN


fta_output
fann_run(self, input)
    struct fann *self;
    fta_input input;
  CLEANUP:
    _check_error(aTHX_ (struct fann_error *)self);

void
fann_randomize_weights(self, min_weight, max_weight)
    struct fann *self;
    fann_type min_weight;
    fann_type max_weight;
  CLEANUP:
    _check_error(aTHX_ (struct fann_error *)self);

void
fann_train(self, input, desired_output)
    struct fann *self;
    fta_input input;
    fta_output desired_output;
  CLEANUP:
    _check_error(aTHX_ (struct fann_error *)self);

fta_output
fann_test(self, input, desired_output)
    struct fann *self;
    fta_input input;
    fta_output desired_output;
  CLEANUP:
    _check_error(aTHX_ (struct fann_error *)self);

void
fann_reset_MSE(self)
    struct fann * self;
  CLEANUP:
    _check_error(aTHX_ (struct fann_error *)self);

void
fann_train_on_file(self, filename, max_epochs, epochs_between_reports, desired_error) 
    struct fann *self;
    const char *filename;
    unsigned int max_epochs;
    unsigned int epochs_between_reports;
    double desired_error;
  CLEANUP:
    _check_error(aTHX_ (struct fann_error *)self);

void
fann_train_on_data(self, data, max_epochs, epochs_between_reports, desired_error)
    struct fann *self;
    struct fann_train_data *data;
    unsigned int max_epochs;
    unsigned int epochs_between_reports;
    double desired_error;
  CLEANUP:
    _check_error(aTHX_ (struct fann_error *)self);
    _check_error(aTHX_ (struct fann_error *)data);

void
fann_cascadetrain_on_file(self, filename, max_neurons, neurons_between_reports, desired_error)
    struct fann *self;
	const char *filename;
    unsigned int max_neurons;
    unsigned int neurons_between_reports;
    double desired_error;
  CLEANUP:
    _check_error(aTHX_ (struct fann_error *)self);

void
fann_cascadetrain_on_data(self, data, max_neurons, neurons_between_reports, desired_error)
    struct fann *self;
    struct fann_train_data *data;
    unsigned int max_neurons;
    unsigned int neurons_between_reports;
    double desired_error;
  CLEANUP:
    _check_error(aTHX_ (struct fann_error *)self);
    _check_error(aTHX_ (struct fann_error *)data);

double
fann_train_epoch(self, data)
    struct fann *self;
    struct fann_train_data *data;
  CLEANUP:
    _check_error(aTHX_ (struct fann_error *)self);
    _check_error(aTHX_ (struct fann_error *)data);

void
fann_print_connections(self)
    struct fann * self;

void
fann_print_parameters(self)
    struct fann * self;

void
fann_cascade_activation_functions(self, ...)
    struct fann *self;
  PREINIT:
    unsigned int count;
  PPCODE:
    if (items > 1) {
        unsigned int i;
        enum fann_activationfunc_enum * funcs;
        count = items - 1;
        Newx(funcs, items - 1, enum fann_activationfunc_enum);
        SAVEFREEPV(funcs);
        for (i = 0; i < count; i++) {
            funcs[i] = _sv2fann_activationfunc_enum(ST(i+1));
        }
        fann_set_cascade_activation_functions(self, funcs, count);
    }
    count = fann_get_cascade_activation_functions_count(self);
    if (GIMME_V == G_ARRAY) {
        unsigned int i;
        enum fann_activationfunc_enum * funcs = fann_get_cascade_activation_functions(self);
        EXTEND(SP, count);
        for (i = 0; i < count; i++) {
            ST(i) = sv_2mortal(_fann_activationfunc_enum2sv(funcs[i]));
        }
        XSRETURN(count);
    }
    else {
        ST(0) = sv_2mortal(newSVuv(count));
        XSRETURN(1);
    }

void
fann_cascade_activation_steepnesses(self, ...)
    struct fann *self;
  PREINIT:
    unsigned int count;
  PPCODE:
    if (items > 1) {
        unsigned int i;
        fann_type * steepnesses;
        count = items - 1;
        Newx(steepnesses, items - 1, fann_type);
        SAVEFREEPV(steepnesses);
        for (i = 0; i < count; i++) {
            steepnesses[i] = SvNV(ST(i+1));
        }
        fann_set_cascade_activation_steepnesses(self, steepnesses, count);
    }
    count = fann_get_cascade_activation_steepnesses_count(self);
    if (GIMME_V == G_ARRAY) {
        unsigned int i;
        fann_type * steepnesses = fann_get_cascade_activation_steepnesses(self);
        EXTEND(SP, count);
        for (i = 0; i < count; i++) {
            ST(i) = sv_2mortal(newSVuv(steepnesses[i]));
        }
        XSRETURN(count);
    }
    else {
        ST(0) = sv_2mortal(newSVuv(count));
        XSRETURN(1);
    }


MODULE = AI::FANN		PACKAGE = AI::FANN::TrainData		PREFIX = fann_train_data_

struct fann_train_data *
fann_train_data_new_from_file(klass, filename)
    SV *klass;
    const char *filename;
  CODE:
    RETVAL = fann_train_data_create_from_file(filename);
  OUTPUT:
    RETVAL
  CLEANUP:
    _check_error(aTHX_ (struct fann_error *)RETVAL);

struct fann_train_data *
fann_train_data_new_empty(klass, num_data, num_input, num_output)
    SV *klass;
    unsigned int num_data;
    unsigned int num_input;
    unsigned int num_output;
  CODE:
    RETVAL = fann_train_data_create(num_data, num_input, num_output);
  OUTPUT:
    RETVAL
  CLEANUP:
    _check_error(aTHX_ (struct fann_error *)RETVAL);

void
fann_train_data_data(self, index, ...)
    struct fann_train_data *self;
    unsigned int index;
  PREINIT:
    AV *input;
    AV *output;
    unsigned int i;
  PPCODE:
    if (index >= self->num_data)
        Perl_croak(aTHX_"index %d is out of range", index);
    switch (items) {
    case 4:
        input = _srv2av(aTHX_ ST(2), self->num_input, "input");
        for (i = 0; i < self->num_input; i++) {
            SV **svp = av_fetch(input, i, 0);
            self->input[index][i] = SvNV(svp ? *svp : &PL_sv_undef);
        }
        output = _srv2av(aTHX_ ST(3), self->num_output, "output");
        for (i = 0; i < self->num_output; i++) {
            SV **svp = av_fetch(output, i, 0);
            self->output[index][i] = SvNV(svp ? *svp : &PL_sv_undef);



( run in 0.440 second using v1.01-cache-2.11-cpan-e93a5daba3e )