我有两个 shape 向量,(batch, dim)我试图将它们相减。目前,我正在使用一个简单的循环从 1 中减去error基于第二个向量(即label)的向量(即)中的特定条目:
per_ts_loss=0
for i, idx in enumerate(np.argmax(label, axis=1)):
error[i, idx] -=1
per_ts_loss += error[i, idx]
我怎样才能矢量化这个?
例如,错误和标签可能如下所示:
error :
array([[ 0.5488135 0.71518937 0.60276338 0.54488318 0.4236548 ]
[ 0.64589411 0.43758721 0.891773 0.96366276 0.38344152]])
label:
array([[0, 0, 0, 1, 0 ],
[0, 1, 0, 0, 0]])
对于此示例,运行以下代码会产生以下结果:
for i, idx in enumerate(np.argmax(label,axis=1)):
error[i,idx] -=1
ls_loss += error[i,idx]
结果 :
error:
[[ 0.5488135 0.71518937 0.60276338 0.54488318 0.4236548 ]
[ 0.64589411 0.43758721 0.891773 0.96366276 0.38344152]]
label:
[[ 0. 0. 0. 1. 0.]
[ 0. 1. 0. 0. 0.]]
error(indexes 3 and 1 are changed):
[[ 0.5488135 0.71518937 0.60276338 -0.45511682 0.4236548 ]
[ 0.64589411 -0.56241279 0.891773 0.96366276 0.38344152]]
per_ts_loss:
-1.01752960574
这是代码本身:https : //ideone.com/e1k8ra
我被困在如何使用 的结果上np.argmax,因为结果是一个新的索引向量,它不能简单地像这样使用:
error[:, np.argmax(label, axis=1)] -=1
所以我被困在这里了!
慕婉清6462132
慕雪6442864
相关分类