示例#1
0
void epoch(map *m, Inputs *in, int iteration, double timeCst, double *epsilon, int numEpoch)
{
    register int i;
    double radius;
    int dst;
    double theta;    

    radius = max_dbl(m->mapRadius * exp(-iteration / timeCst), 1); 
    radius *= radius;

    neuron *n = find_bmu(m, in);

    for(i = 0; i < m->latice_size; ++i)
    {
        dst = neuron_distance_to(&(m->lattice[i]), n);
        
        if(dst < radius)
        {
            theta = exp(-dst / (2 * radius));
            adjust_weights(&(m->lattice[i]), in, *epsilon, theta);

        }
        *epsilon = EPSILON * exp((double)-iteration / (numEpoch- iteration));  
    }
}
示例#2
0
double log_sum(const double *ptr, const size_t size) {
  if (size == 1)  /* do special case faster */
    return *ptr;
  else {
    const double max = *max_dbl(ptr, size);
    const double *end = ptr + size;
    double sum = 0;
    assert(size > 0);
    for (; ptr != end; ++ptr)
      sum += xexp(*ptr - max);
    return xlog(sum) + max;
  }
}