避免在 mxnet 中 BucketingModule 的某些层之间共享权重?

Avoiding weight sharing among certain layers in BucketingModule in mxnet?

我正在使用 BucketingModule 一起训练多个小 models/bots。这里,bucket key 是 bot_id。但是,每个机器人都有单独的目标集 labels/classes(因此,每个机器人的 softmax 层大小不同)。

有什么方法可以在 mxnet 中训练这样的模型,我想在其中共享所有层的权重,但所有机器人中只有一个(softmax)层?

如何使用 sym_gen 方法初始化这样的模型? 如果在 sym_gen 方法中,对于 Softmax 层,我指定 num_hidden=size_dict[bot]

pred = mx.sym.FullyConnected(data=pred, num_hidden=len(size_dict[bot]), name='pred')
pred = mx.sym.SoftmaxOutput(data=pred, label=label, name='softmax')

我收到错误:

Inferred shape does not match shared_exec.arg_array's shape

这是有道理的,因为每个机器人都有不同数量的目标 类。

此问题已在此处发布并得到解决:https://github.com/apache/incubator-mxnet/issues/9042

你可以让sym_gen(default_bucket_key)returns一个"master network"包含所有这些不同形状的FC层,并且sym_gen(other_keys) returns 具有一个特定 FC 的主网络子集。请注意,对于主网络,您可能需要使用 mx.sym.Group 将所有输出组合在一起,以便只返回一个符号。