AI-MXNet

 view release on metacpan or  search on metacpan

t/test_attr.t  view on Meta::CPAN

use strict;
use warnings;
use Test::More tests => 14;
use AI::MXNet qw(mx);
use Storable;

sub contains
{
    my ($x, $y) = @_;
    while(my ($k, $v) = each %$x)
    {
        return 0 unless exists $y->{$k};
        if(ref $y->{$k} and ref $y->{$k} eq 'HASH')
        {
            return 0 unless (ref $v and ref $v eq 'HASH');
            return 0 unless contains($v, $y->{$k});
        }
        elsif($y->{$k} ne $v)
        {
            return 0;
        }
    }
    return 1;
}

sub test_attr_basic
{
    my ($data, $gdata);
    {
        local($mx::AttrScope) = mx->AttrScope(group=>'4', data=>'great');
        $data = mx->symbol->Variable(
            'data',
            attr => {
                qw/ dtype data
                    group 1
                    force_mirroring 1/
            },
            lr_mult => 1);
        $gdata = mx->symbol->Variable('data2');
    }
    ok($gdata->attr('group') == 4);
    ok($data->attr('group') == 1);
    ok($data->attr('lr_mult') == 1);
    ok($data->attr('__lr_mult__') == 1);
    ok($data->attr('force_mirroring') == 1);
    ok($data->attr('__force_mirroring__') == 1);
    my $data2 = Storable::thaw(Storable::freeze($data));
    ok($data->attr('dtype') eq $data2->attr('dtype'));
}

sub test_operator
{
    my $data = mx->symbol->Variable('data');
    my ($fc1, $fc2);
    {
        local($mx::AttrScope) = mx->AttrScope(__group__=>'4', __data__=>'great');
        $fc1 = mx->symbol->Activation($data, act_type=>'relu');
        {
            local($mx::AttrScope) = mx->AttrScope(__init_bias__ => 0, 
                __group__=>'4', __data__=>'great');
            $fc2 = mx->symbol->FullyConnected($fc1, num_hidden=>10, name=>'fc2');
        }
    }



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