shithub: util

ref: e1a0b0dff9876de990e7c7b86e8b6ec97b707017
dir: /ann/annfns.c/

View raw version
#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;
}