代码之家  ›  专栏  ›  技术社区  ›  Lu4

是的。在MxNet中手动设置稠密()层参数

  •  0
  • Lu4  · 技术社区  · 7 年前

    我正在尝试为MxNet(命令式/胶子)实现自己的优化算法,该算法不使用梯度。我的问题很简单,有没有简单的方法来创造新的 nn.Dense(...) 用两个nd表示的参数(即偏差和权重)初始化层。数组()实例?

    提前谢谢!

    1 回复  |  直到 7 年前
        1
  •  1
  •   Thom Lane    7 年前

    可以使用设置的参数创建自定义块 differentiable=False ,并通过 init 论点看到了吗 scales 下例中的参数取自 this tutorial .你也可以看到 FullyConnected 你也可以用它来制作致密层。 F 用于表示通用后端,通常是 mx.ndarray ,但杂交后,这是设置为 mx.symbol .

    class NormalizationHybridLayer(gluon.HybridBlock):
        def __init__(self, hidden_units, scales):
            super(NormalizationHybridLayer, self).__init__()
    
            with self.name_scope():
                self.weights = self.params.get('weights',
                                               shape=(hidden_units, 0),
                                               allow_deferred_init=True)
    
                self.scales = self.params.get('scales',
                                          shape=scales.shape,
                                          init=mx.init.Constant(scales.asnumpy().tolist()), # Convert to regular list to make this object serializable
                                          differentiable=False)
    
        def hybrid_forward(self, F, x, weights, scales):
            normalized_data = F.broadcast_div(F.broadcast_sub(x, F.min(x)), (F.broadcast_sub(F.max(x), F.min(x))))
            weighted_data = F.FullyConnected(normalized_data, weights, num_hidden=self.weights.shape[0], no_bias=True)
            scaled_data = F.broadcast_mul(scales, weighted_data)
            return scaled_data