【发布时间】:2019-06-27 18:44:33
【问题描述】:
我正在实现这个函数的解析形式
其中 k(x,y) 是 RBF 内核 k(x,y) = exp(-||x-y||^2 / (2h))
我的函数原型是
def A(X, Y, grad_log_px,Kxy):
pass
和X、Y 是NxD 矩阵,其中N 是批量大小,D 是一个维度。所以X 是一组x,在上面的等式中N 的大小为grad_log_px 是我使用autograd 计算的一些NxD 矩阵。
Kxy 是NxN 矩阵,其中每个条目(i,j) 是RBF 内核K(X[i],Y[j])
这里的挑战是,在上面的等式中,y 只是一个维度为D 的向量。我有点想传入一批y。 (所以要传递矩阵Y 和NxD 大小)
使用循环遍历批量大小的方程很好,但我无法以更简洁的方式实现
这是我尝试的循环解决方案:
def A(X, Y, grad_log_px,Kxy):
res = []
for i in range(Y.shape[0]):
temp = 0
for j in range(X.shape[0]):
# first term of equation
temp += grad_log_px[j].reshape(D,1)@(Kxy[j,i] * (X[i] - Y[j]) / h).reshape(1,D)
temp += Kxy[j,i] * np.identity(D) - ((X[i] - Y[j]) / h).reshape(D,1)@(Kxy[j,i] * (X[i] - Y[j]) / h).reshape(1,D) # second term of equation
temp /= X.shape[0]
res.append(temp)
return np.asarray(res) # return NxDxD array
在等式中:grad_{x} 和 grad_{y} 两个维度 D
【问题讨论】:
-
你试过用 numpy 来实现方程吗?
-
@taurus05 numpy 有更容易实现这一点的功能吗?
-
Numpy 有一组预定义的函数。它们大多是用 c 编写的。因此,如果您使用它,您将不会遇到任何性能问题。
-
如果您希望我们
numpy的人们能够提供帮助,我们真的需要更多线索来了解该方程式到底应该做什么。 -
你能展示你的循环解决方案吗?
标签: python numpy machine-learning pytorch