Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python fmin\u ncg不支持的操作数类型错误_Python_Optimization_Scipy - Fatal编程技术网

Python fmin\u ncg不支持的操作数类型错误

Python fmin\u ncg不支持的操作数类型错误,python,optimization,scipy,Python,Optimization,Scipy,所以我有一个成本函数,我正试图用scipy.optimize中的fmin_ncg最小化。如果我只运行一次,它似乎可以正常工作,但我还编写了一个引导脚本,它可以对数据进行重新采样,并反复最小化成本函数以计算置信区间。经过几次引导脚本迭代后,我得到以下错误。信息量不大。有人知道它可能来自哪里吗 Traceback (most recent call last): File "bootstrap.py", line 97, in <module> main(rat, clust

所以我有一个成本函数,我正试图用scipy.optimize中的fmin_ncg最小化。如果我只运行一次,它似乎可以正常工作,但我还编写了一个引导脚本,它可以对数据进行重新采样,并反复最小化成本函数以计算置信区间。经过几次引导脚本迭代后,我得到以下错误。信息量不大。有人知道它可能来自哪里吗

Traceback (most recent call last):
  File "bootstrap.py", line 97, in <module>
    main(rat, cluster_parameter.main)
  File "bootstrap.py", line 83, in main
    t, i = estimator(resampled_data, RAT_CLUSTERS[rat])
  File "/home/matthew/Dropbox/Work/vocalization_analysis/cluster_parameter.py", line 176, in main
    args=(included_clusters,jumps), avextol=1e-5)
  File "/usr/lib/python2.7/dist-packages/scipy/optimize/optimize.py", line 1252, in fmin_ncg
    callback=callback, **opts)
  File "/usr/lib/python2.7/dist-packages/scipy/optimize/optimize.py", line 1365, in _minimize_newtoncg
    update = alphak * pk
TypeError: unsupported operand type(s) for *: 'NoneType' and 'float'
这是它的导数

def dcost(x, *args):
theta = x[0]
b = x[1]
included_clusters = args[0]
jumps = args[1]

h = [(n, SLOPES[n](theta)) for n in included_clusters]
h = OrderedDict(h)
dh = [(n, DSLOPES[n](theta)) for n in included_clusters]
dh = OrderedDict(dh)
bisecting_slopes= find_bisector(h)
vertices = polygon_vertices(bisecting_slopes, included_clusters)
cluster = poly_cluster(jumps[:,0:2], vertices)

dcost_theta = 0
dcost_b = 0
for c in h.keys(): 
    idx = find(cluster==c)
    l = len(jumps[idx,0:2])
    for j in jumps[idx,0:2]:
        x = (j[0] / h[c] + j[1] - b) / (h[c] + 1 / h[c])
        y = h[c] * x + b 
        dx_theta = ((h[c]**2 + 1) * (j[1] - b) * dh[c] - 
            2 * (j[0] + (j[1] - b) * h[c]) * h[c] * dh[c]) / (h[c]**2 + 1)**2
        dy_theta = ((h[c]**2 + 1) * (j[0] * dh[c] + 2 * (j[1] - b) * h[c] * dh[c]) 
            - 2 * (j[0] * h[c] + (j[1] - b) * h[c]**2) * h[c] * dh[c]) / (h[c]**2 + 1)**2
        dx_b = -h[c] / (h[c]**2 + 1)
        dy_b = -h[c]**2 / (h[c]**2 + 1)

        dcost_theta += (2 * (j[0] - x) * dx_theta 
            + 2 * ((j[1] - b) - y) * dy_theta) / l

        dcost_b += (2 * (j[0] - x) * dx_b 
            + 2 * ((j[1] - b) - y) * dy_b) / l

return np.array([dcost_theta, dcost_b])
这也是我的主要功能。它只是叫fmin_ncg

def main(jumps, included_clusters = range(NUM_CLUSTERS)):
theta_min, b_min = fmin_ncg(f=cost, x0=[0,0], fprime=dcost,
 args=(jumps, included_clusters), avextol=1e-5, disp=0)

return theta_min, b_min

如果你想查看节目的其余部分,你可以在这里和这里

就您而言,这似乎是一个重要的声明

File "bootstrap.py", line 97, in <module>
    main(rat, cluster_parameter.main)
文件“bootstrap.py”,第97行,在
main(rat,集群_参数.main)

这意味着错误不是在定义的函数中发生,而是在尝试获取参数时在主函数中发生。请显示主程序以及如何调用该程序。似乎你的论点是无效的。argparse(如果您有Python 2.6.7,则为optparse)可能在这里作为设置的一部分很有用。

您有什么Scipy版本?IIRC,这是一个已经修复的错误。然而,如果是这样的话,失败是因为fmin_ncg没有找到一个可接受的下降方向——升级Scipy在这里对您没有帮助,因为算法随后报告它没有收敛到一个可接受的解决方案。我会仔细检查导数函数的正确性,因为错误的梯度会导致这种类型的问题。我有scipy版本0.12.0。我可以再次检查,但我觉得导数函数是正确的。当我运行bootstrap算法时,我多次调用fmin_ncg。直到我第30次或第40次调用它时,才会抛出错误。我建议您编辑主代码,使其具有前导空格,并以更易读的方式显示。另外,演示如何从命令行调用它。我在原来的帖子中添加了main函数。它所做的一切叫做fmin_ncg。
File "bootstrap.py", line 97, in <module>
    main(rat, cluster_parameter.main)