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__、forward 或 hybrid_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_cat 和 dynamic_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_cat 和 dynamic_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 (Symbol 或 NDArray) – 第一个输入张量。
*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]#
- 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)。
- 返回类型
张量