2017-09-12 12 views
0

私はPythonでtSNEアルゴリズムを実装しようとしています。私は、通常使用されている解析勾配の代わりに、勾配を計算するためにautogradパッケージを使用しています。autogradを使ったtSNEグラジエントの計算

しかし、私は必要に応じてグラデーションを計算することができません。私はMLには新しく、オートグラードや他のフレームワークで自分の手を試しています。

これは私のアプローチです。私はまず類似行列Pを計算する。次に、損失を計算しながら、低次元の類似性行列Qをオンザゴーで計算する。これは私のコードです -

def compute_kl_loss(Y, P, n): 
    loss = 0 
    for i in range(n): 
     qij = 1/(1 + np.sum((Y[i,:] - Y)**2),1) 
     for j in range(n): 
      loss += P[i,j]* np.log(P[i,j]) - P[i,j]*np.log(qij) 
    return loss 

def get_grad(Y, P): 
    n = Y.shape[0] 
    loss_kld = lambda Y: compute_kl_loss(Y, P, n) 
    gradY = grad(loss_kld) 
    dY = gradY(Y). 

しかし、このアプローチは動作していないようです。次のエラーが表示されます。 -

File "tsne.py", line 130, in compute_kl_loss 
    qij = 1/(1 + np.sum((Y[i,:] - Y)**2),1) 
TypeError: unsupported operand type(s) for /: 'int' and 'tuple' 

これを修正する方法を教えてください。そして私のアプローチは正しいのですか?それとももっと良い方法がありますか?

ありがとうございます。この行で

答えて

0

qij = 1/(1 + np.sum((Y[i,:] - Y)**2),1) 

あなたがからなるタプルを作成している:

left_part: 1 + np.sum((Y[i,:] - Y)**2) 
right_part: 1 

タプルビーイング:my_tuple = (left_part, right_part)

はかなりあなたのエラーで説明されています。

オペレーション1/(x, y)(x, y)はタプル)は、エラーで説明されているようにPythonでは無効です!

あなたはおそらく大括弧をチェックする必要があります。

関連する問題