操纵 nn.在 MxNet 中手动使用密集() 图层参数



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

提前谢谢你!

您可以使用设置differentiable=False的参数创建自定义块,并通过init参数提供用于初始化的数据。请参阅本教程中以下示例中的scales参数。您还可以看到一个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

最新更新