gluonts.mx.block.feature 模块#

class gluonts.mx.block.feature.FeatureAssembler(T: int, use_static_cat: bool = False, use_static_real: bool = False, use_dynamic_cat: bool = False, use_dynamic_real: bool = False, embed_static: typing.Optional[gluonts.mx.block.feature.FeatureEmbedder] = None, embed_dynamic: typing.Optional[gluonts.mx.block.feature.FeatureEmbedder] = None, dtype: typing.Type = <class 'numpy.float32'>, **kwargs)[source]#

基类:mxnet.gluon.block.HybridBlock

将特征组装成 MXNet 张量。输入特征基于以下标准进行区分:

  • 静态(与时间无关)特征 对比 动态(即与时间有关)特征

  • 类别特征 对比 实数值特征。

动态特征的形状为 (N, T, C),静态特征的形状为 (N, C),其中:

  • N 是处理批次中的元素数量,

  • T 是时间维度,

  • C 是特征数量。

如果使用了多种特征类型,FeatureAssembler 将假定所有传入参数的 N 和 T 维度相同。

类别特征可以选择性地使用训练过的嵌入层进行嵌入,通过嵌套的 FeatureEmbedder 组件实现。

>>> embed_static = FeatureEmbedder(
...     cardinalities=[2],
...     embedding_dims=[3],
...     prefix='embed_static_',
... )
>>> embed_dynamic = FeatureEmbedder(
...     cardinalities=[5, 5],
...     embedding_dims=[6, 9],
...     prefix='embed_dynamic_',
... )

上面的代码片段中有四个 nn.Embedding 层,分别对应一个静态类别特征和两个动态类别特征。这些层的 (input_dim, output_dim) 分别是 (2, 3)(5, 6)(5, 9)。创建的 assemble_feature 实例将不会处理实数值特征。

FeatureAssembler 实例将使用哪些特征类型的子集由相应的构造函数参数确定。这里有一个只使用实数值特征来构建特征汇编器的例子。

>>> N, T = 50, 168
>>> assemble_feature = FeatureAssembler(
...     T=T,
...     # use_static_cat=True,
...     # use_static_real=False,
...     # use_dynamic_cat=True,
...     # use_dynamic_real=False,
...     embed_static=embed_static,
...     embed_dynamic=embed_dynamic
... )

调用 FeatureAssembler__call__forwardhybrid_forward 方法时,我们总是必须传递完整的特征集。缺失的特征用具有适当形状的零张量表示。

例如,

>>> import mxnet as mx
>>> feat_static_cat = mx.nd.random.uniform(0, 2, shape=(N, 1)).floor()
>>> feat_dynamic_cat = mx.nd.random.uniform(
    0, 5, shape=(N, 168, 2)
).floor()
>>> feat_static_real = mx.nd.zeros(shape=(N, 1,)) # empty feature
>>> feat_dynamic_real = mx.nd.zeros(shape=(N, T, 1,)) # empty feature

在将嵌入器参数初始化为一并实例化一些随机的 static_catdynamic_cat 向量后,

>>> assemble_feature.collect_params().initialize(mx.initializer.One())

可以按如下方式进行前向传播。

>>> assembled_feature = assemble_feature(
    feat_static_cat, feat_static_real, feat_dynamic_cat, feat_dynamic_real
)
>>> assembled_feature.shape
(50, 168, 20)
>>>

然而,上述调用中 static_catdynamic_cat 的相对顺序是由 use_static_cat 在类构造函数中定义在 use_dynamic_cat 之前的事实决定的。

hybrid_forward(F, feat_static_cat: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], feat_static_real: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], feat_dynamic_cat: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], feat_dynamic_real: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol]) Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol][source]#

覆盖此 Block 的符号图构造方法。

参数
  • x (SymbolNDArray) – 第一个输入张量。

  • *args (Symbol 列表NDArray 列表) – 附加输入张量。

process_dynamic_cat(F, feature: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol]) Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol][source]#
process_dynamic_real(F, feature: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol]) Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol][source]#
process_static_cat(F, feature: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol]) Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol][source]#
process_static_real(F, feature: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol]) Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol][source]#
class gluonts.mx.block.feature.FeatureEmbedder(cardinalities: typing.List[int], embedding_dims: typing.List[int], dtype: typing.Type = <class 'numpy.float32'>, **kwargs)[source]#

基类:mxnet.gluon.block.HybridBlock

嵌入一系列类别特征。

参数
  • cardinalities – 每个类别特征的基数。

  • embedding_dims – 嵌入每个类别特征的维度数量。

  • dtype – 嵌入特征的数据类型。

hybrid_forward(F, features: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol]) Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol][source]#
参数
  • F

  • features – 类别特征,形状为:(N,T,C) 或 (N,C),其中 C 是类别特征的数量。

返回

concatenated_tensor – 嵌入特征的连接张量,形状为:(N,T,C) 或 (N,C),其中 C 是每个类别特征的嵌入维度之和,即 C = sum(self.config.embedding_dims)。

返回类型

张量