2017-08-07 11 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]'、私は 'y = w * x'のように訓練できるパラメータ' w'を持っています。もし '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/)。具体的に

、のは、最小限の例を見てみましょうは、データ

label = mx.nd.array([12,30]) 
x = mx.nd.array([[1, 2, 3], [4, 5, 6]]) 
w = random weights 
w.attach_grad() 

、電車準備http://mxnet.io/tutorials/gluon/gluon.htmlhttp://gluon.mxnet.io/P01-C05-autograd.html

を適応

with autograd.record(): 
    output = mx.nd.dot(w, x.T) 
    loss = gluon.loss.L2Loss(output, label) 
    loss.backward() 
あなたが計算された勾配で updating the weightsを忘れてはいけない

後方パス。グラデーションはw.gradにあります。ループ内でウェイト更新とともにトレーニングコードを実行すると、単一の更新が収束には不十分である可能性が高いためです。

+0

具体的な例がありますか?私はあなたが初期化しなければならないと思った(私は、bindと呼ばれ、勾配のためのいくつかの議論を、あなたが背景を背景にしたいと思う)。 – Drew

+0

これはシンボリックAPIを使用する場合には本当に必要です。シンボリックAPIの利点は、それがより高速であることです。しかし、私が上で参照した新たに導入されたグルオンAPIは、開発が容易なので、最初にそこで働くことをお勧めします。私はこの例にいくつかの情報を追加するために上記の投稿を編集しています。 – leezu

+0

私の種類の大きなコードベースにはグルーオンの依存関係はありません。グルーオンはMXNetと一緒に遊んでいますか?私はちょうど1つのパラメータを追加したいので、すべてのコードベースを複雑すぎるかもしれません。言うまでもなく、スピードはすでに私の問題です。ちょっと不思議なことに、私はクラスの象徴的なAPIでこれをどうやってしますか? – Drew