SymbolBlock¶
-
class
mxnet.gluon.nn.SymbolBlock(outputs, inputs, params=None)[source]¶ Construct block from symbol. This is useful for using pre-trained models as feature extractors. For example, you may want to extract 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=True, 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['model_dense0_relu_fwd_output'], internals['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))
Besides the contruction method, SymbolBlock can be used as same as
mxnet.gluon.nn.HybridBlock.-
static
imports(symbol_file, input_names, param_file=None, ctx=None)[source]¶ 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 (list of str) – List of input variable names
param_file (str, optional) – Path to parameter file.
ctx (Context, default None) – The context to initialize SymbolBlock on.
- Returns
SymbolBlock loaded from symbol and parameter files.
- Return type
Examples
>>> net1 = gluon.model_zoo.vision.resnet18_v1( ... prefix='resnet', pretrained=True) >>> net1.hybridize() >>> x = mx.nd.random.normal(shape=(1, 3, 32, 32)) >>> out1 = net1(x) >>> net1.export('net1', epoch=1) >>> >>> net2 = gluon.SymbolBlock.imports( ... 'net1-symbol.json', ['data'], 'net1-0001.params') >>> out2 = net2(x)
-
forward(x, *args)[source]¶ Defines the forward computation. Arguments can be either
NDArrayorSymbol.
-
cast(dtype)[source]¶ Cast this Block to use another data type.
- Parameters
dtype (str or numpy.dtype) – The new data type.
-
hybrid_forward(F, x, *args, **kwargs)[source]¶ Overrides to construct symbolic graph for this Block.
-
apply(fn)¶ Applies
fnrecursively to every child block as well as self.- Parameters
fn (callable) – Function to be applied to each submodule, of form fn(block).
- Returns
- Return type
this block
-
collect_params(select=None)¶ Returns a
ParameterDictcontaining thisBlockand all of its children’s Parameters(default), also can returns the selectParameterDictwhich match some given regular expressions.For example, collect the specified parameters in [‘conv1_weight’, ‘conv1_bias’, ‘fc_weight’, ‘fc_bias’]:
model.collect_params('conv1_weight|conv1_bias|fc_weight|fc_bias')
or collect all parameters whose names end with ‘weight’ or ‘bias’, this can be done using regular expressions:
model.collect_params('.*weight|.*bias')
- Parameters
select (str) – regular expressions
- Returns
- Return type
The selected
ParameterDict
-
export(path, epoch=0)¶ Export HybridBlock to json format that can be loaded by SymbolBlock.imports, mxnet.mod.Module or the C++ interface.
Note
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 (int) – Epoch number of saved model.
-
hybridize(active=True, **kwargs)¶ Activates or deactivates
HybridBlocks 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.
-
infer_shape(*args)¶ Infers shape of Parameters from inputs.
-
infer_type(*args)¶ Infers data type of Parameters from inputs.
-
initialize(init=<mxnet.initializer.Uniform object>, ctx=None, verbose=False, force_reinit=False)¶ Initializes
Parameters of thisBlockand its children. Equivalent toblock.collect_params().initialize(...)- Parameters
init (Initializer) – Global default Initializer to be used when
Parameter.init()isNone. Otherwise,Parameter.init()takes precedence.ctx (Context or list 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.
-
load_parameters(filename, ctx=None, allow_missing=False, ignore_extra=False)¶ Load parameters from file previously saved by save_parameters.
- Parameters
filename (str) – Path to parameter file.
ctx (Context or list of Context, default cpu()) – Context(s) to 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.
References
-
load_params(filename, ctx=None, allow_missing=False, ignore_extra=False)¶ [Deprecated] Please use load_parameters.
Load parameters from file.
- filenamestr
Path to parameter file.
- ctxContext or list of Context, default cpu()
Context(s) to initialize loaded parameters on.
- allow_missingbool, default False
Whether to silently skip loading parameters not represents in the file.
- ignore_extrabool, default False
Whether to silently ignore parameters from the file that are not present in this Block.
-
name_scope()¶ Returns a name space object managing a child
Blockand parameter names. Should be used within awithstatement:with self.name_scope(): self.dense = nn.Dense(20)
Please refer to naming tutorial for more info on prefix and naming.
-
register_child(block, name=None)¶ Registers block as a child of self.
Blocks assigned to self as attributes will be registered automatically.
-
register_forward_hook(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 (callable) – The forward hook function of form hook(block, input, output) -> None.
- Returns
- Return type
mxnet.gluon.utils.HookHandle
-
register_forward_pre_hook(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 (callable) – The forward hook function of form hook(block, input) -> None.
- Returns
- Return type
mxnet.gluon.utils.HookHandle
-
save_parameters(filename)¶ Save parameters to file.
Saved parameters can only be loaded with load_parameters. Note that this method only saves parameters, not model structure. If you want to save model structures, please use
HybridBlock.export().- Parameters
filename (str) – Path to file.
References
-
save_params(filename)¶ [Deprecated] Please use save_parameters. Note that if you want load from SymbolBlock later, please use export instead.
Save parameters to file.
- filenamestr
Path to file.
-
summary(*inputs)¶ Print the summary of the model’s output and parameters.
The network must have been initialized, and must not have been hybridized.
- Parameters
inputs (object) – Any input that the model supports. For any tensor in the input, only
mxnet.ndarray.NDArrayis supported.