嗨,我正在尝试以放射状图的形式显示时间序列。为了计算theta
的值,我试图使两个信号之间的角度差与1-cor(sig1,sig2)
成比例,其中cor
代表信号的相关性。因此,我实现了极距函数,如下所示:
import autograd.numpy as anp
from autograd import grad
def polar_distance(theta_array):
length = theta_array.shape[0]
A = anp.tile(theta_array,(length,1))
mat = A.T-A
return 2*(1-anp.cos(mat))
该函数返回以角度theta_array
排列在单位圆上的点的距离矩阵。
现在,为了计算最佳角度,我实现了以下功能:
def optim_order(sigmat):
sig = anp.array(sigmat) #converting to autograd.numpy array
corc = 1.0-anp.corrcoef(sig) # 1 - correlation
def loss(thetas):
difs = polar_distance(thetas)-corc
mults = anp.multiply(difs,difs)
sums = anp.sum(mults)
out = anp.sqrt(sums)
return out
loss_gradient_fun = grad(loss)
thetas = anp.zeros(len(corc)) # initializing thetas (I've tried random too)
print("Initial loss:", loss(thetas))
for i in range(100):
thetas -= loss_gradient_fun(thetas) * 0.01
print("Trained loss:", loss(thetas))
# do something with thetas
由于某些原因,loss_gradient_fun(thetas)
返回0
。我检查了代码的其他部分,它们均按预期工作。知道为什么会这样吗?