【发布时间】:2019-06-21 00:50:48
【问题描述】:
我想找到函数 wrt 变量 T 的梯度。我收到错误操作数广播。为什么我收到此错误以及如何解决? l 取值从 0 到 4。
def grad(l,d1,d2):
grad_T = 0
b = 1
w = np.ones(5,1)
w.reshape(5,1)
T = np.random.rand(46,5)
D = np.random.rand(46,9063)
if(y[d2]!=y[d1]):
difVec = D[ : ,d2].astype(float) - D[ :,d1].astype(float)
dify = 1
if(y[d2]<y[d1]):
dify = -1
grad_T = grad_T + (-1*dify*w[l,0]*difVec)/(1+np.exp(dify(
w.transpose() @ T.transpose() @ difVec + b )))
return(grad_T)
Error
<ipython-input-40-56571fb637a5> in grad(d1, d2)
20 if(y[d2]<y[d1]):
21 dify = -1
---> 22 grad_T = grad_T +
(-1*dify*w[l,1]*difVec)/(1+np.exp(dify * ( w.transpose() @
T.transpose() @ difVec + b )))
ValueError: operands could not be broadcast together with shapes (46,)
(5,)
【问题讨论】:
-
在您进行编辑后,您的代码仍然无法运行。
np.ones要求您传递维度列表。您无法编译上面的代码。再次参考我的回答。此外,您没有解决w[l, 1]的问题,无法进行索引。最后,你的 grad_T 的初始形状是什么?如果是 (5,),那么您的求和将不起作用。因为,你不能将两个不同大小的向量相加。
标签: python-3.x numpy machine-learning array-broadcasting