Python Mxnet元素级乘法
在MXNet中,如果我想创建一个权重向量,将每个输入相乘,即使用Python Mxnet元素级乘法,python,mxnet,Python,Mxnet,在MXNet中,如果我想创建一个权重向量,将每个输入相乘,即使用w*x_I,然后在权重上反向投影w,我该怎么做 我试过: y_hat = input w1 = mx.sym.Variable("w1") y_hat = mx.symbol.broadcast_mul(w1, y_hat) 您可以根据点积进行计算: x = mx.nd.array([[1, 2, 3], [4, 5, 6]]) w = mx.nd.array([2,2,2]) mx.nd.dot(w, x.T) 将导致[
w*x_I
,然后在权重上反向投影w
,我该怎么做
我试过:
y_hat = input
w1 = mx.sym.Variable("w1")
y_hat = mx.symbol.broadcast_mul(w1, y_hat)
您可以根据点积进行计算:
x = mx.nd.array([[1, 2, 3], [4, 5, 6]])
w = mx.nd.array([2,2,2])
mx.nd.dot(w, x.T)
将导致[12.30.]如您所愿
现在只需随机初始化w
,计算输出和目标输出之间的损失,然后反向传播。您可以使用新的glion
接口来实现该功能()
具体来说,让我们看一个经过改编和
准备数据
label = mx.nd.array([12,30])
x = mx.nd.array([[1, 2, 3], [4, 5, 6]])
w = random weights
w.attach_grad()
训练
with autograd.record():
output = mx.nd.dot(w, x.T)
loss = gluon.loss.L2Loss(output, label)
loss.backward()
不要忘记在向后传球时计算的梯度。渐变将在
w.grad
中提供。在循环中运行训练代码和权重更新,因为单个更新可能不足以实现收敛。提供一些输入并显示/询问您想要的预期输出,例如x=[[1,2,3],[4,5,6]]
,y=[12,30]
,我想有一个参数w
,我可以训练它,这样y=w*x
,所以如果w=2
,那么w*x=[[2,4,6],[8,10,12]
向量w#size=(num#u特征,1)
与x
中样本的每个特征的元素相乘,有具体的例子吗?我认为你必须初始化(我认为它叫做bind,一些梯度参数,任何你想反向支持的参数)。。它如何知道要对哪个变量进行backprop呢?如果使用符号API,确实需要这样做。符号API的优点是速度更快。然而,我上面提到的新引入的胶子API更容易开发,所以我建议您首先在那里实现您的想法。我正在编辑上面的文章,以便为示例添加更多信息。我的大型代码库中没有任何胶子依赖项。胶子与MXNet一起玩吗?我只想添加一个参数,因此使所有代码库复杂化可能太多了。更不用说,速度对我来说已经是个问题了。。奇怪的是,我该如何在类符号API中做到这一点呢?Gluon是mxnet的一部分(尽管只在主分支中,直到下一个版本发布)。对于符号API,您可以采用相同的方法,只需使用mx.sym.dot而不是mx.nd.dot,并为x、y和w定义变量。要获得相对于w的梯度,需要使用模块的get_input_grads(),因为w被视为“输入数据”。或者,要让mxnet管理w作为权重数组,您需要定义自己的操作符。不过,根据您的代码库,将命令式/gluon API与现有代码库混合可能是最简单的方法。这没有问题。有没有将w定义为运算符的示例?不管怎样,这似乎都很复杂