cvxpy有变量类型参与运算的一些规则

本文介绍了使用cvxpy解决凸优化问题时遇到的变量类型参与运算的规则和注意事项,包括cvxpy不支持张量运算、不能直接使用numpy的广播功能、变量类型运算需遵循矩阵形状一致原则、不能直接通过下标访问变量数组元素以及变量数组与numpy数组的区别。同时提到了constraints条件叠加的正确形式和debug方法。
摘要由CSDN通过智能技术生成

今天想利用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中是不存在点乘运算的,它里面的*表示的是线性代数中标准

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值