NAME
AI::MXNet::Gluon::Block - Base class for all neural network layers and models.
DESCRIPTION
Base class for all neural network layers and models. Your models should
subclass this class.
AI::MXNet::Gluon::Block can be nested recursively in a tree structure. You can create and
assign child AI::MXNet::Gluon::Block as regular attributes
use AI::MXNet::Gluon::NN qw(nn);
use AI::MXNet qw(mx);
package Model;
use AI::MXNet::Gluon::Mouse;
use AI::MXNet::Function::Parameters;
extends 'AI::MXNet::Gluon::Block';
sub BUILD
{
my $self = shift;
$self->name_scope(sub {
$self->dense0(nn->Dense(5, in_units=>5));
$self->dense1(nn->Dense(5, in_units=>5));
});
}
method forward($x)
{
return $self->dense1->($self->dense0->($x));
}
my $model = Model->new()
$model->initialize(ctx=>mx->cpu(0))
$model->(nd->zeros([10, 10], ctx=>mx->cpu(0)));
Child AI::MXNet::Gluon::Block assigned this way will be registered and ->collect_params
will collect their Parameters recursively.
Parameters
----------
Prefix acts like a name space. All children blocks created in parent block's
name_scope will have parent block's prefix in their name.
Please refer to
naming tutorial https://mxnet.apache.org/api/python/docs/tutorials/packages/gluon/naming.html
for more info on prefix and naming.
params : AI::MXNet::Gluon::ParameterDict or undef
AI::MXNet::Gluon::ParameterDict for sharing weights with the new AI::MXNet::Gluon::Block. For example,
if you want `dense1` to share `dense0`'s weights, you can do
$dense0 = nn->Dense(20);
$dense1 = nn->Dense(20, params=>dense0->collect_params());
params
Returns this `Block`'s parameter dictionary (does not include its
children's parameters).
collect_params
Returns a AI::MXNet::Gluon::ParameterDict containing this AI::MXNet::Gluon::Block and all of its
children's Parameters(default), also can returns the ParameterDict
with parameters that match a regular expression.
For example, collects parameters specified in ['conv1_weight', 'conv1_bias', 'fc_weight',
'fc_bias'
$model->collect_params('conv1_weight|conv1_bias|fc_weight|fc_bias')
or collects all parameters that have the name end with 'weight' or 'bias', this can be done
using regular expressions.
$model->collect_params('.*weight|.*bias')
save_parameters
Save parameters to file.
filename : str
Path to file.
load_parameters
Load parameters from file.
$filename : str
Path to parameter file.
:$ctx= : Context or list of Context
Context(s) initialize loaded parameters on.
:$allow_missing : bool, default False
Whether to silently skip loading parameters not represents in the file.
:$ignore_extra : bool, default False
Whether to silently ignore parameters from the file that are not
present in this Block.
register_child
Registers block as a child of self. `Block`s assigned to self as
attributes will be registered automatically.
register_forward_pre_hook
Registers a forward pre-hook on the block.
The hook function is called immediately before 'forward'.
It should not modify the input or output.
Parameters
----------
$hook : CodeRef or callable object
The forward hook function of form $hook->($block, $input).
Returns
-------
AI::MXNet::Gluon::Utils::HookHandle
register_forward_hook
Registers a forward hook on the block.
The hook function is called immediately after 'forward'.
It should not modify the input or output.
Parameters
----------
$hook : CodeRef or callable object
The forward hook function of form $hook->($block, $input).
Returns
-------
AI::MXNet::Gluon::Utils::HookHandle
apply
Applies $fn recursively to every child block as well as self.
Parameters
----------
$fn : callable
Function to be applied to each submodule, of form `$fn->($block)`.
Returns
-------
this block
initialize
Initializes AI::MXNet::Gluon::Parameters of this AI::MXNet::Gluon::Block and its children.
Equivalent to $block->collect_params()->initialize(...)
Parameters
----------
$init : Initializer
Global default Initializer to be used when Parameter->init is undefined`.
Otherwise, Parameter->init takes precedence.
ctx : Context or array ref of Context
Keeps a copy of Parameters on one or many context(s).
verbose : bool, default False
Whether to verbosely print out details on initialization.
force_reinit : bool, default False
Whether to force re-initialization if parameter is already initialized.
hybridize
Activates or deactivates `HybridBlock`s recursively. Has no effect on
non-hybrid children.
Parameters
----------
$active : bool, default True
Whether to turn hybrid on or off.
:$static_alloc : bool, default False
Statically allocate memory to improve speed. Memory usage may increase.
:$static_shape : bool, default False
Optimize for invariant input shapes between iterations. Must also
set static_alloc to True. Change of input shapes is still allowed
but slower.
cast
Cast this Block to use another data type.
Parameters
----------
dtype : Dtype
The new data type.
forward
Overrides to implement forward computation using `NDArray`. Only
accepts positional arguments.
Parameters
----------
@args : array of NDArray
Input tensors.
summary
Print the summary of the model's output and parameters.
The network must have been initialized, and must not have been hybridized.
Parameters
----------
@inputs : objects
Any inputs that the model supports. For any tensor in the input, only
AI::MXNet::NDArray is supported.
NAME
AI::MXNet::Gluon::HybridBlock
DESCRIPTION
HybridBlock supports forwarding with both Symbol and NDArray.
Forward computation in HybridBlock must be static to work with Symbols,
i.e. you cannot call aspdl, shape, dtype, etc on tensors.
Also, you cannot use branching or loop logic that bases on non-constant
expressions like random numbers or intermediate results, since they change
the graph structure for each iteration.
Before activating with hybridize(), HybridBlock works just like normal
Block. After activation, HybridBlock will create a symbolic graph
representing the forward computation and cache it. On subsequent forwards,
the cached graph will be used instead of hybrid_forward.
Refer Hybrid tutorial L<https://mxnet.io/tutorials/gluon/hybrid.html> to see
the end-to-end usage.
infer_shape
Infers shape of Parameters from inputs.
forward
Defines the forward computation. Arguments can be either
NDArray or Symbol
hybrid_forward
Overrides to construct symbolic graph for this `Block`.
Parameters
----------
x : Symbol or NDArray
The first input tensor.
*args : list of Symbol or list of NDArray
Additional input tensors.
export
Export HybridBlock to json format that can be loaded by AI::MXNet::Module
or the C++ interface.
When there are only one input, it will have name 'data'. When there
Are more than one inputs, they will be named as 'data0', 'data1', etc.
Parameters
----------
$path : str
Path to save model. Two files 'path-symbol.json' and 'path-xxxx.params'
will be created, where xxxx is the 4 digits epoch number.
:$epoch=0 : Int
Epoch number of saved model.
NAME
AI::MXNet::Gluon::SymbolBlock - Construct block from symbol.
DESCRIPTION
Construct block from symbol. This is useful for using pre-trained models
as feature extractors. For example, you may want to extract get the output
from fc2 layer in AlexNet.
Parameters
----------
outputs : Symbol or list of Symbol
The desired output for SymbolBlock.
inputs : Symbol or list of Symbol
The Variables in output's argument that should be used as inputs.
params : ParameterDict
Parameter dictionary for arguments and auxililary states of outputs
that are not inputs.
Examples
--------
>>> # To extract the feature from fc1 and fc2 layers of AlexNet
>>> $alexnet = gluon->model_zoo->vision->alexnet(pretrained=>1, ctx=>mx->cpu(),
prefix=>'model_');
>>> $inputs = mx->sym->var('data');
>>> $out = $alexnet->($inputs);
>>> $internals = $out->get_internals()
>>> print($internals->list_outputs())
['data', ..., 'model_dense0_relu_fwd_output', ..., 'model_dense1_relu_fwd_output', ...]
>>> $outputs = [$internals->slice('model_dense0_relu_fwd_output'),
$internals->slice('model_dense1_relu_fwd_output')];
>>> # Create SymbolBlock that shares parameters with alexnet
>>> $feat_model = gluon->SymbolBlock($outputs, $inputs, params=>$alexnet->collect_params());
>>> $x = mx->nd->random_normal(shape=>[16, 3, 224, 224]);
>>> print($feat_model->($x));
imports
Import model previously saved by HybridBlock->export or
Module->save_checkpoint as a SymbolBlock for use in Gluon.
Parameters
----------
$symbol_file : Str
Path to symbol file.
$input_names : Str|ArrayRef[Str]
List of input variable names
:$param_file : Str, optional
Path to parameter file.
$ctx : Context, default undef
The context to initialize SymbolBlock on.
Returns
-------
SymbolBlock
SymbolBlock loaded from symbol and parameter files.