AI-ML

 view release on metacpan or  search on metacpan

t/01-activation-funcs.t  view on Meta::CPAN

_float($d->get_element(0,1), 1.99999733e-03, "Element correct at 0,1");
_float($d->get_element(0,2), 9.95054754e-01, "Element correct at 0,2");
_float($d->get_element(0,3), 9.99329300e-01, "Element correct at 0,3");
_float($d->get_element(0,4), 9.99999146e-01, "Element correct at 0,4");
_float($d->get_element(0,5), -7.99999998e-05, "Element correct at 0,5");
_float($d->get_element(0,6), -9.66389636e-01, "Element correct at 0,6");
_float($d->get_element(0,7), 9.99999970e-01, "Element correct at 0,7");
_float($d->get_element(0,8), 1, "Element correct at 0,8");
_float($d->get_element(0,9), -1, "Element correct at 0,9");

#Test derivative of tanh
$d = d_tanh($m);
_float($d->get_element(0,0), 1.00000000e+00, "Element correct at 0,0");
_float($d->get_element(0,1), 9.99996000e-01, "Element correct at 0,1");
_float($d->get_element(0,2), 9.86603717e-03, "Element correct at 0,2");
_float($d->get_element(0,3), 1.34095068e-03, "Element correct at 0,3");
_float($d->get_element(0,4), 1.70882169e-06, "Element correct at 0,4");
_float($d->get_element(0,5), 9.99999994e-01, "Element correct at 0,5");
_float($d->get_element(0,6), 6.60910712e-02, "Element correct at 0,6");
_float($d->get_element(0,7), 6.09199171e-08, "Element correct at 0,7");
_float($d->get_element(0,8), 0, "Element correct at 0,8");
_float($d->get_element(0,9), 0, "Element correct at 0,9");


# Test softmax
my $e =  Math::Lapack::Matrix->new(
               [
                [1, 2, 1],  # sample 1
                [2, 4, 2],  # sample 1
                [3, 5, 3],  # sample 2
                [6, 6, 6]
            ]);


my $soft = softmax($e);

is($e->rows, 4, "Right number of rows - softmax");
is($e->columns, 3, "Right number of cols - softmax");

# prob of first col
_float($soft->get_element(0,0), 0.00626879, "Element correct at 0,0");
_float($soft->get_element(1,0), 0.01704033, "Element correct at 1,0");
_float($soft->get_element(2,0), 0.04632042, "Element correct at 2,0");
_float($soft->get_element(3,0), 0.93037047, "Element correct at 3,0");

# prob of second col
_float($soft->get_element(0,1), 0.01203764, "Element correct at 0,1");
_float($soft->get_element(1,1), 0.08894682, "Element correct at 1,1");
_float($soft->get_element(2,1), 0.24178252, "Element correct at 2,1");
_float($soft->get_element(3,1), 0.65723302, "Element correct at 3,1");

#prob of third col
_float($soft->get_element(0,2), 0.00626879, "Element correct at 0,2");
_float($soft->get_element(1,2), 0.01704033, "Element correct at 1,2");
_float($soft->get_element(2,2), 0.04632042, "Element correct at 2,2");
_float($soft->get_element(3,2), 0.93037047, "Element correct at 3,2");


done_testing;

sub _float {
  my ($a, $b, $c) = @_;
	is($a, float($b, tolerance => 0.00001), $c);
}



( run in 1.277 second using v1.01-cache-2.11-cpan-39bf76dae61 )