我有一段代码是这样的:
a = Y[0]; b = Z[0]
print(a, b)
loss = 0
for i in range(len(a)):
k = len(a)-i
loss += (2**(k-1))*np.abs(a[i]-b[i])
print(loss)
其中 Y
和 Z
的维度是 250 x 10
,每行是 10 位二进制值。例如,print(a,b)
打印如下:[1 0 0 0 0 0 0 0 1 0] [0 0 0 1 1 1 1 1 0 0]
现在我想在 for 循环中为 Y
和 Z
之间的相应行应用两行函数。但我不想做这样的事情:
for j in range(Y.shape[0]):
a = Y[j]; b = Z[j]
loss = 0
for i in range(len(a)):
k = len(a)-i
loss += (2**(k-1))*np.abs(a[i]-b[i])
print(loss)
我本质上是在尝试在 keras/tensorflow 中创建自定义损失函数。那个 for 循环示例不适用于大型张量操作。我如何使用某种批处理矩阵运算而不是 for 循环来完成它?
最佳答案
你可以这样做:
factor = 2**np.arange(Y.shape[1])[::-1]
loss = np.sum(factor * np.abs(Y-Z), axis=-1)
关于Python:在不使用迭代的情况下将for循环操作扩展到矩阵中的每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65785897/