ref: 9de25964fd0da3631675116bd12e700d9779eb4e
dir: /ann/annweights.c/
#include <u.h>
#include <libc.h>
#define RAND_MAX 0xFFFF
#include "ann.h"
Weights*
weightsinitdoubles(Weights *in, double *init)
{
int i, o;
for (i = 0; i <= in->inputs; i++)
for (o = 0; o < in->outputs; o++)
in->values[i][o] = init[o];
return in;
}
Weights*
weightsinitdouble(Weights *in, double init)
{
int i, o;
for (i = 0; i <= in->inputs; i++)
for (o = 0; o < in->outputs; o++)
in->values[i][o] = init;
return in;
}
Weights*
weightsinitrandscale(Weights *in, double scale)
{
int i, o;
srand(time(0));
for (i = 0; i <= in->inputs; i++)
for (o = 0; o < in->outputs; o++)
in->values[i][o] = (((double)rand()/RAND_MAX) - 0.5) * scale;
return in;
}
Weights*
weightsinitrand(Weights *in)
{
weightsinitrandscale(in, 2.0);
return in;
}
Weights*
weightscreate(int inputs, int outputs, int initialize)
{
int i;
Weights *ret = calloc(1, sizeof(Weights));
ret->inputs = inputs;
ret->outputs = outputs;
ret->values = calloc(inputs+1, sizeof(double*));
for (i = 0; i <= inputs; i++)
ret->values[i] = calloc(outputs, sizeof(double));
if (initialize)
weightsinitrand(ret);
return ret;
}