【发布时间】:2019-07-05 03:22:03
【问题描述】:
我正在做一个优化项目,我遇到了一个非常奇怪的 scipy 错误。在多次执行目标函数后,它的参数向量神奇地变成了一个二维数组(但它应该一直是一个一维数组),没有任何明确的指令。 有人遇到过同样的事情吗? 这可能是一个 scipy 错误还是我应该再次仔细检查我的代码?
我的意思是,如果我的代码有问题,我看不出有什么原因会在正确执行几次迭代后发生
每次调用目标函数时,我都会打印 x 及其形状。这是目标函数内部的代码
def objective(x, some, other, parameters..):
print("current x",x)
print("current x.shape",x.shape)
some code here...
score = calculate_objective_function(some_parameters_here...)
return -score
这就是发生的事情
current x [-2322.83367669 13868.03814803 0. ]
current x.shape (3,)
0
current x [-2322.83367669 13868.03814803 0. ]
current x.shape (3,)
1
current x [-2321.83367669 13868.03814803 0. ]
current x.shape (3,)
2
current x [-2324.45171069 13868.03814803 0. ]
current x.shape (3,)
3
current x [-2322.83367669 13868.03814803 0. ]
current x.shape (3,)
4
current x [-2323.45171067 13868.03814803 0. ]
current x.shape (3,)
5
current x [-2322.45171069 13868.03814803 0. ]
current x.shape (3,)
6
current x [[-2322.8237272 13868.03814803 0. ]]
current x.shape (1, 3)
Traceback (most recent call last):
File "/home/mingzhe/PycharmProjects/ZebraFinder/venv/optimization_image.py", line 692, in <module>
solution = minimize(objective,x0,method='Powell',args= additional_and_point_cloud, callback= callback_fun)
File "/home/mingzhe/PycharmProjects/ZebraFinder/venv/lib/python3.5/site-packages/scipy/optimize/_minimize.py", line 590, in minimize
return _minimize_powell(fun, x0, args, callback, **options)
File "/home/mingzhe/PycharmProjects/ZebraFinder/venv/lib/python3.5/site-packages/scipy/optimize/optimize.py", line 2612, in _minimize_powell
tol=xtol * 100)
File "/home/mingzhe/PycharmProjects/ZebraFinder/venv/lib/python3.5/site-packages/scipy/optimize/optimize.py", line 2398, in _linesearch_powell
alpha_min, fret, iter, num = brent(myfunc, full_output=1, tol=tol)
File "/home/mingzhe/PycharmProjects/ZebraFinder/venv/lib/python3.5/site-packages/scipy/optimize/optimize.py", line 2109, in brent
res = _minimize_scalar_brent(func, brack, args, **options)
File "/home/mingzhe/PycharmProjects/ZebraFinder/venv/lib/python3.5/site-packages/scipy/optimize/optimize.py", line 2141, in _minimize_scalar_brent
brent.optimize()
File "/home/mingzhe/PycharmProjects/ZebraFinder/venv/lib/python3.5/site-packages/scipy/optimize/optimize.py", line 1992, in optimize
fu = func(*((u,) + self.args)) # calculate new output value
File "/home/mingzhe/PycharmProjects/ZebraFinder/venv/lib/python3.5/site-packages/scipy/optimize/optimize.py", line 2397, in myfunc
return func(p + alpha*xi)
File "/home/mingzhe/PycharmProjects/ZebraFinder/venv/lib/python3.5/site-packages/scipy/optimize/optimize.py", line 326, in function_wrapper
return function(*(wrapper_args + args))
File "/home/mingzhe/PycharmProjects/ZebraFinder/venv/optimization_image.py", line 550, in objective
centroid = image_coordinate_from_world_coordinate(np.array([x[0],x[1]]),scale_factor,min_point_world)
IndexError: index 1 is out of bounds for axis 0 with size 1
Process finished with exit code 1
更新:@HYRY 的回答解决了问题。我的分数计算函数返回一个 1*1 numpy 矩阵而不是一个缩放器。转换为浮动后,它按预期工作。
【问题讨论】:
-
你能添加错误和生成它的代码吗?
-
是的@ladygremlin,我添加了信息
-
题名不正确,能改个更合适的吗?
-
嗨@iRohitBhatia,我知道标题可能不够准确,但情况很奇怪,老实说我不知道如何正确描述它。英语不是我的第一语言。很抱歉造成混乱,如果您有任何建议,那就太好了