您可以使用设置的参数创建自定义块
differentiable=False
,并通过提供初始化数据
init
论点。见
scales
以下示例中的参数取自
本教程
。你也可以看到一个例子
FullyConnected
您也想要用于密集层。
F
用于表示通用后端,通常这将是
mx.ndarray
,但在杂交后,这将设置为
mx.symbol
。
class NormalizationHybridLayer(gluon.HybridBlock):
def init(self, hiddenunits, 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
</code>