Python scipy.optimize最小化 - 可能返回矩阵或只有一维向量?

时间:2015-10-25 23:43:14

标签: python matrix scipy

我正在尝试使scipy.optimize中的功能最小化。我试图改变权重矩阵(10乘6)作为函数的输入参数。但是,当我尝试执行最小化时,矩阵变为一维向量,防止函数中的矩阵对齐。如下面的错误消息所示,我的10乘6矩阵正在转换为向量。

过去有没有人与scipy.optimize有过类似的问题?任何意见都会非常感激。

ValueError: shapes (2364,10) and (60,) not aligned: 10 (dim 1) != 60 (dim 0)

1 个答案:

答案 0 :(得分:1)

类似于上面所述的@Julien Brenu,通常优化例程将向量作为输入。因此,您应该编写函数以将向量作为输入,以快速将其构造为10 x 6矩阵。

def cool_func(parameter_guess):
  parameter_matrix = parameter_guess.reshape(10,6)
  return parameter_matrix

你说矩阵是权重。你不能有负重量,对吗?优化器没有明确地知道这一点 - 你有两种解决方法:

  1. 使用“COBYLA”方法 - http://docs.scipy.org/doc/scipy/reference/optimize.minimize-cobyla.html,允许您声明约束。

  2. 请勿将矢量parameter_guess输入cool_func()。而是将np.log(parameter_guess)输入cool_func()并立即np.exp(parameter_guess)以恢复它。你可以通过提升它来做同样的事情,但这可以推动优化器考虑疯狂的高值。