2015-11-06 97 views
0

我看到线性化方法中的一些维度错误。具体而言,ValueError:形状(6,108)和(36,)未对齐:108(dim 1)!= 36(dim 0)

File "/usr/local/lib/python2.7/site-packages/openmdao/core/system.py", line 726, in _apply_linear_jac 
    arg_vec[param] += J.T.dot(dresids._flat(unknown)).reshape(shape) 
ValueError: shapes (6,108) and (36,) not aligned: 108 (dim 1) != 36 (dim 0) 

我具有限定雅可比的一部分,用于单一的输出矢量WRT所有的输入矢量的一些2D阵列。由于有几种情况符合给定的形状,因此我一直无法确定错误的确切原因。我想知道如果问题可以通过我自己扁平化阵列来解决。

任何其他想法如何解决这个错误,将不胜感激。这些渐变在1.0之前运行良好。

完整的错误消息是如下:

Traceback (most recent call last): 
    File "/Users/user/directory/exampleOptimization.py", line 82, in <module> 
    prob.run() 
    File "/usr/local/lib/python2.7/site-packages/openmdao/core/problem.py", line 789, in run 
    self.driver.run(self) 
    File "/usr/local/lib/python2.7/site-packages/openmdao/drivers/scipy_optimizer.py", line 191, in run 
    options=self.opt_settings) 
    File "/usr/local/lib/python2.7/site-packages/scipy/optimize/_minimize.py", line 452, in minimize 
    constraints, callback=callback, **options) 
    File "/usr/local/lib/python2.7/site-packages/scipy/optimize/slsqp.py", line 383, in _minimize_slsqp 
    g = append(fprime(x),0.0) 
    File "/usr/local/lib/python2.7/site-packages/scipy/optimize/optimize.py", line 285, in function_wrapper 
    return function(*(wrapper_args + args)) 
    File "/usr/local/lib/python2.7/site-packages/openmdao/drivers/scipy_optimizer.py", line 306, in _gradfunc 
    return_format='array') 
    File "/usr/local/lib/python2.7/site-packages/openmdao/core/driver.py", line 666, in calc_gradient 
    sparsity=sparsity) 
    File "/usr/local/lib/python2.7/site-packages/openmdao/core/problem.py", line 899, in calc_gradient 
    sparsity=sparsity) 
    File "/usr/local/lib/python2.7/site-packages/openmdao/core/problem.py", line 1261, in _calc_gradient_ln_solver 
    dx_mat = root.ln_solver.solve(rhs, root, mode) 
    File "/usr/local/lib/python2.7/site-packages/openmdao/solvers/scipy_gmres.py", line 104, in solve 
    callback=self.monitor) 
    File "<string>", line 2, in gmres 
    File "/usr/local/lib/python2.7/site-packages/scipy/sparse/linalg/isolve/iterative.py", line 85, in non_reentrant 
    return func(*a, **kw) 
    File "/usr/local/lib/python2.7/site-packages/scipy/sparse/linalg/isolve/iterative.py", line 478, in gmres 
    work[slice2] += sclr1*matvec(work[slice1]) 
    File "/usr/local/lib/python2.7/site-packages/scipy/sparse/linalg/interface.py", line 220, in matvec 
    y = self._matvec(x) 
    File "/usr/local/lib/python2.7/site-packages/scipy/sparse/linalg/interface.py", line 460, in _matvec 
    return self.__matvec_impl(x) 
    File "/usr/local/lib/python2.7/site-packages/openmdao/solvers/scipy_gmres.py", line 162, in mult 
    system._sys_apply_linear(mode, ls_inputs=self.system._ls_inputs, vois=(voi,)) 
    File "/usr/local/lib/python2.7/site-packages/openmdao/core/group.py", line 680, in _sys_apply_linear 
    gs_outputs=gs_outputs) 
    File "/usr/local/lib/python2.7/site-packages/openmdao/core/group.py", line 680, in _sys_apply_linear 
    gs_outputs=gs_outputs) 
    File "/usr/local/lib/python2.7/site-packages/openmdao/core/system.py", line 619, in _sys_apply_linear 
    self.apply_linear(self.params, self.unknowns, dparams, dunknowns, dresids, mode) 
    File "/usr/local/lib/python2.7/site-packages/openmdao/core/component.py", line 512, in apply_linear 
    mode) 
    File "/usr/local/lib/python2.7/site-packages/openmdao/core/system.py", line 726, in _apply_linear_jac 
    arg_vec[param] += J.T.dot(dresids._flat(unknown)).reshape(shape) 
ValueError: shapes (6,108) and (36,) not aligned: 108 (dim 1) != 36 (dim 0) 
+0

这很难从错误中知道,但我怀疑你的linearize函数返回的一个数组的大小可能不正确。问题是从python返回的错误不告诉你哪个输入/输出对,所以它可能很难找到它。你能分享你的linearize函数的代码吗? –

回答

3

只需向上推的修复到dev改善为误大小的雅可比矩阵的错误消息。他们会像现在这样:

"In component 'comp', the derivative of 'y2' wrt 'x1' should have shape '(3, 2)' but has shape '(3, 3)' instead."

如果你拉下最新并重试运行,我认为新的消息将有助于查明问题。

+0

谢谢,我现在就试试。我的线性化函数相当复杂,我试图找出合理的方式发布它,但是我更喜欢这种方法。 – jthomas

+2

事实证明,我在几个组件中为线性化函数创建了几个形状不正确的数组,这是因为将这些组件从旧的OpenMDAO中提取出来,在那里构建实际的jacobian以返回。改进后的错误消息对于解决这个问题并纠正问题非常有帮助。 – jthomas

相关问题