避免在 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 将所有输出组合在一起,以便只返回一个符号。
我正在使用 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 将所有输出组合在一起,以便只返回一个符号。