关于cvxpy

今天想利用cvxpy工具包解决一个凸优化的问题,发现在运行以下代码的时候,第三行代码如果采用括号中的形式会出现报错,没有找到原因,但是换成括号外面的代码形式之后,运行就完全没有问题了,记录一下,希望有大佬看到以后能帮我解答一下为什么会出现这个问题。
w_out = cvx.Variable((n_hidden_2,1))
b_out = cvx.Variable((1))
pout = layer2 * w_out + b_out(np.dot(layer2, w_out) + b_out)
obj = cvx.Minimize(cvx.sum_squares(pout- data_y[0:80]))

prob = cvx.Problem(obj)
prob.solve()

另外,cvxpy是处理不了张量的问题的,传入的数据类型只能是数组或者变量参数等,cvxpy里面也没有mean求平均这个函数,cvxpy个人感觉会出现上面说的问题是由于numpy数组与cvxpy中的Variable做了向量运算,而这种运算在cvxpy中是做不了的,numpy做向量运算的时候两个数组里面都要有数据,而上面的括号里面的w_out显然是一个空的(若打印,输出为None),这样做显然是得不到运算结果的。好像在cvxpy中是不存在对数组中各元素的相乘运算的,它里面的*表示的是香型代数中标准的矩阵相乘
用cvxpy的时候,要注意有变量类型参与的运算中要严格满足线性代数加减乘除的矩阵形状一致的原则,不能使用numpy的数组广播功能。还有有变量类型参与的运算结果是不能用下标的方式访问名义上的数组元素的

猜你喜欢

转载自blog.csdn.net/qq_32140491/article/details/82251131