ref: e1a0b0dff9876de990e7c7b86e8b6ec97b707017
dir: /ann/annfns.c/
#include <u.h>
#include <libc.h>
#include "ann.h"
double
activation_sigmoid(Neuron *in)
{
return 1.0/(1.0+exp(-in->sum));
}
double
gradient_sigmoid(Neuron *in)
{
double y = in->value;
return y * (1.0 - y);
}
double
activation_tanh(Neuron *in)
{
return tanh(in->sum);
}
double
gradient_tanh(Neuron *in)
{
return 1.0 - in->value*in->value;
}
double
activation_leaky_relu(Neuron *in)
{
if (in->sum > 0)
return in->sum;
return in->sum * 0.01;
}
double
gradient_leaky_relu(Neuron *in)
{
if (in->sum > 0)
return 1.0;
return 0.01;
}
double
activation_piece(Neuron *in)
{
if (in->sum < -0.5)
return 0.0;
else if (in->sum > 0.5)
return 1.0;
return (in->sum + 0.5);
}
double
gradient_piece(Neuron *in)
{
if (in->sum > -0.5 && in->sum < 0.5)
return 1.0;
return 0.01;
}