module Synapse.NN.Metrics
(
MetricFn
, lossFnToMetricFn
, Metric (Metric, unMetric)
) where
import Synapse.NN.Losses (LossFn)
import Synapse.Tensors.Mat (Mat)
import Synapse.Autograd (Symbol(unSymbol), constSymbol)
type MetricFn a = Mat a -> Mat a -> Mat a
lossFnToMetricFn :: LossFn a -> MetricFn a
lossFnToMetricFn :: forall a. LossFn a -> MetricFn a
lossFnToMetricFn LossFn a
loss Mat a
true Mat a
predicted = Symbol (Mat a) -> Mat a
forall a. Symbol a -> a
unSymbol (Symbol (Mat a) -> Mat a) -> Symbol (Mat a) -> Mat a
forall a b. (a -> b) -> a -> b
$ LossFn a
loss (Mat a -> Symbol (Mat a)
forall a. a -> Symbol a
constSymbol Mat a
true) (Mat a -> Symbol (Mat a)
forall a. a -> Symbol a
constSymbol Mat a
predicted)
newtype Metric a = Metric
{ forall a. Metric a -> MetricFn a
unMetric :: MetricFn a
}