私は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'
これを修正する方法を教えてください。そして私のアプローチは正しいのですか?それとももっと良い方法がありますか?
ありがとうございます。この行で