mxnet - 在 MxNet 中手动操作 nn.Dense() 层参数
问题描述
我正在尝试为不使用渐变的 MxNet (Imperative / Gluon) 实现我自己的优化算法。我的问题很简单,是否有一种简单的方法可以创建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
推荐阅读
- webpack - 使用 customize-cra 从 node_modules 中的 bundle.js 中删除包
- node.js - 在 mongoose 聚合中修改 $cond 的结果值?
- python - 无法为 Python 安装 Kivy
- kotlin - 调试 Kotlin 符号处理 (KSP)
- mysql - 如何使用条件创建有效的 SQL 触发器?
- reactjs - 将 onClick 与 React 组件一起使用,可点击组件边界与浏览器上的可见位置不匹配
- swift - 后退按钮色调颜色
- python - python - 如何使用python中的haversine库计算大距离矩阵?
- vue.js - 在 VPS 中配置 Vue 应用程序以指向特定域
- reactjs - 即使使用 prevState,状态也不会立即更新