我正在尝试使scipy.optimize
中的功能最小化。我试图改变权重矩阵(10乘6)作为函数的输入参数。但是,当我尝试执行最小化时,矩阵变为一维向量,防止函数中的矩阵对齐。如下面的错误消息所示,我的10乘6矩阵正在转换为向量。
过去有没有人与scipy.optimize有过类似的问题?任何意见都会非常感激。
ValueError: shapes (2364,10) and (60,) not aligned: 10 (dim 1) != 60 (dim 0)
答案 0 :(得分:1)
类似于上面所述的@Julien Brenu,通常优化例程将向量作为输入。因此,您应该编写函数以将向量作为输入,以快速将其构造为10 x 6矩阵。
def cool_func(parameter_guess):
parameter_matrix = parameter_guess.reshape(10,6)
return parameter_matrix
你说矩阵是权重。你不能有负重量,对吗?优化器没有明确地知道这一点 - 你有两种解决方法:
使用“COBYLA”方法 - http://docs.scipy.org/doc/scipy/reference/optimize.minimize-cobyla.html,允许您声明约束。
请勿将矢量parameter_guess
输入cool_func()
。而是将np.log(parameter_guess)
输入cool_func()
并立即np.exp(parameter_guess)
以恢复它。你可以通过提升它来做同样的事情,但这可以推动优化器考虑疯狂的高值。