AI-MXNet
view release on metacpan or search on metacpan
lib/AI/MXNet/IO.pm view on Meta::CPAN
has 'provide_data' => (is => 'rw');
has 'provide_label' => (is => 'rw');
package AI::MXNet::DataIter;
use Mouse;
use overload '<>' => sub { shift->next },
'@{}' => sub { shift->list };
=head1 NAME
AI::MXNet::DataIter - A parent class for MXNet data iterators.
=cut
has 'batch_size' => (is => 'rw', isa => 'Int', default => 0);
=head2 reset
Reset the iterator.
=cut
method reset(){}
lib/AI/MXNet/NDArray.pm view on Meta::CPAN
{
$s->[0] += $shape->[$i] if $s->[0] < 0;
$s->[1] += $shape->[$i] if $s->[1] < 0;
confess("Dimension $i slice mismatch (begin $s->[0] > end $s->[1])")
if($s->[0] > $s->[1]);
push @$begin, $s->[0];
push @$end, $s->[1] + 1;
$i++;
}
return $self->_slice($begin->[0], $end->[0]) if @slices == 1;
return AI::MXNet::NDArray::Slice->new(parent => $self, begin => $begin, end => $end);
}
method set(AcceptableInput $value, $reverse=)
{
confess("set value must be defined") unless defined $value;
confess("Array is not writable") if not $self->writable;
## plain number
if(not ref $value)
{
$self->_set_value($value, { out => $self });
lib/AI/MXNet/NDArray/Slice.pm view on Meta::CPAN
use warnings;
use Mouse;
use AI::MXNet::Base;
use AI::MXNet::Function::Parameters;
=head1 NAME
AI::MXNet::NDArray::Slice - A convenience class for slicing of the AI::MXNet::NDArray objects.
=cut
has parent => (is => 'ro', isa => 'AI::MXNet::NDArray', required => 1);
has begin => (is => 'ro', isa => 'Shape', required => 1);
has end => (is => 'ro', isa => 'Shape', required => 1);
use overload
'.=' => \&set,
'=' => sub { $_[0] },
'""' => \¬supported,
'+' => \¬supported,
'+=' => \¬supported,
'-' => \¬supported,
'-=' => \¬supported,
lib/AI/MXNet/NDArray/Slice.pm view on Meta::CPAN
'==' => \¬supported,
'!=' => \¬supported,
'>' => \¬supported,
'>=' => \¬supported,
'<' => \¬supported,
'<=' => \¬supported;
method set(AcceptableInput $value, $reverse=)
{
confess("set value must be defined") unless defined $value;
confess("${\ $self->parent } is not writable") unless $self->parent->writable;
my $shape = [];
zip(
sub { my ($begin, $end) = @_; push @$shape, ($end-$begin); },
$self->begin,
$self->end
);
if(ref $value)
{
if(blessed($value) and $value->isa('AI::MXNet::NDArray'))
{
$value = $value->as_in_context($self->parent->context);
}
elsif(blessed($value) and $value->isa('AI::MXNet::NDArray::Slice'))
{
$value = $value->sever->as_in_context($self->parent->context);
}
else
{
$value = AI::MXNet::NDArray->array($value, ctx => $self->parent->context);
}
confess("value $value does not match slice dim sizes [@$shape]")
if @{$value->shape} != @$shape;
zip(
sub {
my ($dsize, $vdsize) = @_;
confess("Slice [@$shape] != $value given as value")
if $dsize != $vdsize;
},
$shape,
$value->shape
);
AI::MXNet::NDArray->_crop_assign(
$self->parent,
$value,
{ out => $self->parent, begin => $self->begin, end => $self->end }
);
}
else
{
AI::MXNet::NDArray->_crop_assign_scalar(
$self->parent,
{ "scalar" => $value, out => $self->parent, begin => $self->begin, end => $self->end }
);
}
return $self->parent;
}
method sever()
{
return AI::MXNet::NDArray->crop(
$self->parent,
{ begin => $self->begin, end => $self->end }
);
}
{
no warnings 'misc';
use attributes 'AI::MXNet::NDArray::Slice', \&AI::MXNet::NDArray::Slice::sever, 'lvalue';
}
sub notsupported { confess("NDArray only support continuous slicing on axis 0"); }
sub AUTOLOAD { notsupported() }
( run in 0.624 second using v1.01-cache-2.11-cpan-a5abf4f5562 )