今天想利用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()
(1)cvxpy是处理不了张量的问题的,传入的数据类型只能是数组或者变量参数等
(2)cvxpy里面没有mean求平均这个函数
(3)用cvxpy的时候,要注意有变量类型参与的运算中要严格满足线性代数加减乘除的矩阵形状一致的原则,不能使用numpy的数组广播功能。
(4)有变量类型参与的运算结果想用下标的方式访问元素,只能将该变量定义为字典,再利用字典元素的下表访问字典中的元素。
补充:
(5)cvxpy会出现上面说的问题是由于numpy数组与cvxpy中的Variable做了向量运算,而这种运算在cvxpy中是做不了的,numpy做向量运算的时候两个数组里面都要有数据,而上面的括号里面的w_out显然是一个空的(若打印,输出为None),这样做显然是得不到运算结果的。(即cvxpy中是不存在点乘运算的,它里面的*表示的是线性代数中标准