2017-08-07 107 views
2

在MXNet中,如果我想創建一個權重向量,使其與每個輸入相乘,即具有w*x_i,然後在權重w上反向傳遞,我該怎麼做?Mxnet元素明智乘法

我想:

y_hat = input 
w1 = mx.sym.Variable("w1") 
y_hat = mx.symbol.broadcast_mul(w1, y_hat) 
+0

給出一些輸入並顯示/詢問你想要的輸出 –

+0

假設'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_features,1)'的元素明智乘法與'x'中的樣本的每個特徵 – Drew

回答

3

,就可以把計算的點積方面:

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,計算輸出和目標輸出之間的損失,然後再傳播。您可以使用新的gluon接口(http://gluon.mxnet.io/)。

具體,讓我們來看看一個小例子,適合http://mxnet.io/tutorials/gluon/gluon.htmlhttp://gluon.mxnet.io/P01-C05-autograd.html

準備數據

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() 

不要用你所計算的梯度忘記updating the weights落後的傳球。梯度將在w.grad中提供。將訓練碼與循環中的體重更新一起運行,因爲單次更新可能不足以收斂。

+0

有沒有一個這樣的具體例子?我以爲你必須初始化(我認爲它的調用綁定,一些參數的梯度,任何你想backprop over)..它如何知道哪個變量backprop over? – Drew

+0

如果您使用符號API,那確實是需要的。符號API的優點是速度更快。然而,我上面提到的新引入的膠子API更容易開發,所以我建議你先讓你的想法在那裏工作。我正在編輯上面的帖子,爲示例添加更多信息。 – leezu

+0

我在我的大代碼庫中沒有任何膠子依賴。膠粘劑與MXNet一起玩嗎?我只是想添加一個參數,所以複雜的代碼庫可能太多了。更何況,速度已成爲我的一個問題..只是好奇,我該怎麼做這個類符號API? – Drew