在MxNet中手动操作nn.Dense()图层参数


产品你是狗
2025-02-07 04:11:27 (6天前)
  1. 我正在尝试为不使用渐变的MxNetImperative / Gluon)实现我自己的优化算法。我的问题很简单,有一个简单的方法来创建新的nn.Dense(...)图层...

2 条回复
  1. 0# 一腔诗意喂了狗 | 2019-08-31 10-32



    您可以使用设置的参数创建自定义块

    differentiable=False

    ,并通过提供初始化数据

    init

    论点。见

    scales

    以下示例中的参数取自

    本教程

    。你也可以看到一个例子

    FullyConnected

    您也想要用于密集层。

    F

    用于表示通用后端,通常这将是

    mx.ndarray

    ,但在杂交后,这将设置为

    mx.symbol





    1. class NormalizationHybridLayer(gluon.HybridBlock):
      def init(self, hiddenunits, scales):
      super(NormalizationHybridLayer, self)._init
      ()

    2.     with self.name_scope():
    3.         self.weights = self.params.get('weights',
    4.                                        shape=(hidden_units, 0),
    5.                                        allow_deferred_init=True)
    6.         self.scales = self.params.get('scales',
    7.                                   shape=scales.shape,
    8.                                   init=mx.init.Constant(scales.asnumpy().tolist()), # Convert to regular list to make this object serializable
    9.                                   differentiable=False)
    10. def hybrid_forward(self, F, x, weights, scales):
    11.     normalized_data = F.broadcast_div(F.broadcast_sub(x, F.min(x)), (F.broadcast_sub(F.max(x), F.min(x))))
    12.     weighted_data = F.FullyConnected(normalized_data, weights, num_hidden=self.weights.shape[0], no_bias=True)
    13.     scaled_data = F.broadcast_mul(scales, weighted_data)
    14.     return scaled_data
    15. </code>

登录 后才能参与评论