module Network.Neuron
( Neuron(..)
, ActivationFunction
, ActivationFunction'
, sigmoidNeuron
, tanhNeuron
, recluNeuron
, sigmoid
, sigmoid'
, tanh
, tanh'
, reclu
, reclu'
) where
data Neuron a = Neuron { activation :: (ActivationFunction a)
, activation' :: (ActivationFunction' a)
}
type ActivationFunction a = a -> a
type ActivationFunction' a = a -> a
sigmoidNeuron :: (Floating a) => Neuron a
sigmoidNeuron = Neuron sigmoid sigmoid'
tanhNeuron :: (Floating a) => Neuron a
tanhNeuron = Neuron tanh tanh'
recluNeuron :: (Floating a) => Neuron a
recluNeuron = Neuron reclu reclu'
sigmoid :: (Floating a) => a -> a
sigmoid t = 1 / (1 + exp (1 * t))
sigmoid' :: (Floating a) => a -> a
sigmoid' t = s * (1 s)
where s = sigmoid t
tanh' :: (Floating a) => a -> a
tanh' t = 1 s ^ 2
where s = tanh t
reclu :: (Floating a) => a -> a
reclu t = log (1 + exp t)
reclu' :: (Floating a) => a -> a
reclu' t = sigmoid t