【发布时间】:2011-11-25 19:12:46
【问题描述】:
我在 python 中有一个函数,它接受一个向量并返回一个实数。我正在使用 scipy.optimize fmin 和 fmin_bfgs 函数来查找为函数提供近似最小值的参数。但是,当我使用 fmin 时,我得到了一个很好的答案(很慢),但是当我切换到 fmin_bfgs 时,我得到一个错误,说“矩阵未对齐”。这是我的功能:
def norm(b_):
b_ = b_.reshape(int(M),1) #M already given elsewhere
Yb = np.dot(Y,b_) #Y already given elsewhere
B = np.zeros((int(M),int(M)))
for j in xrange(int(M)):
B[j][j] = -t[j+1]*np.exp(-t[j+1]*Yb[j]) #The t[j] are already known
P = np.zeros((int(M),1))
for j in xrange(int(M)):
P[j][0] = np.exp(-t[j+1]*Yb[j])
diff = np.zeros((int(M),1)) #Functions d(i,b) are known
for i in xrange(1,int(M)-1):
diff[i][0] = d(i+1,b_) - d(i,b_)
diff[0][0] = d(1,b_)
diff[int(M)-1][0] = -d(int(M)-1,b_)
term1_ = (1.0/N)*(np.dot((V - np.dot(c,P)).transpose(),W))
term2_ = np.dot(W,V - np.dot(c,P)) #V,c,P,W already known
term1_ = np.dot(term1_,term2_)
term2_ = lambd*np.dot(Yb.transpose(),diff)
return term1_ + term2_
我是这样称呼 fmin_bfgs 的:
fmin_bfgs(norm, b_guess,fprime=None,
args=(),gtol=0.0001,norm=0.00000000001,
epsilon=1.4901161193847656e-08,maxiter=None,
full_output=0, disp=1, retall=0, callback=None)
当我调用 fmin 时,它工作正常,只是太慢而无法使用(我需要优化几次)。但是当我尝试 fmin_bfgs 时,我得到了这个错误:
Traceback(最近一次调用最后一次): 模块中的文件“C:\Program Files\Wing IDE 101 4.0\src\debug\tserver_sandbox.py”,第 287 行 文件“C:\Python27\Lib\site-packages\scipy\optimize\optimize.py”,第 491 行,在 fmin_bfgs old_fval,old_old_fval) 文件“C:\Python27\Lib\site-packages\scipy\optimize\linesearch.py”,第 239 行,在 line_search_wolfe2 derphi0、c1、c2、amax 中) 文件“C:\Python27\Lib\site-packages\scipy\optimize\linesearch.py”,第 339 行,在 scalar_search_wolfe2 phi0、derphi0、c1、c2 中) 文件“C:\Python27\Lib\site-packages\scipy\optimize\linesearch.py”,第 471 行,在 _zoom derphi_aj = derphi(a_j) 文件“C:\Python27\Lib\site-packages\scipy\optimize\linesearch.py”,第 233 行,在 derphi 中返回 np.dot(gval[0], pk) ValueError:矩阵未对齐
任何想法为什么会发生这种情况?我提供的函数的所有矩阵都正确对齐(并且函数在 fmin 工作后工作)。非常感谢您的帮助!
【问题讨论】:
-
我认为这是因为在我调用的函数中某些数字变得太大或太小。反正我有解决办法,所以不用回答。
标签: optimization matrix alignment