【发布时间】:2018-03-22 14:08:20
【问题描述】:
我想计算两个 numpy 数组的分类交叉熵。两个数组的长度相同。
-
y_true包含大约 10000 个二维数组,它们是标签 -
y_pred包含 10000 个二维数组,这是我的预测
结果应该是一个 1D numpy 数组,其中包含数组的所有分类交叉熵值。公式为:
这里x_true是一个真实向量的第i个元素,x_pred是预测向量的第i个元素。
我的实现看起来像这样,但速度很慢。完成整形以将 2D 数组转换为 1D 数组以对它们进行简单的迭代。
def categorical_cross_entropy(y_true, y_pred):
losses = np.zeros(len(y_true))
for i in range(len(y_true)):
single_sequence = y_true[i].reshape(y_true.shape[1]*y_true.shape[2])
single_pred = y_pred[i].reshape(y_pred.shape[1]*y_pred.shape[2])
sum = 0
for j in range(len(single_sequence)):
log = math.log(single_pred[j])
sum = sum + single_sequence[j] * log
sum = sum * (-1)
losses[i] = sum
return losses
不可能转换为张量,因为tf.constant(y_pred) 在MemoryError 中失败,因为y_true 和y_pred 中的每个二维数组的尺寸大致为190 x 190。有什么想法吗?
【问题讨论】:
标签: python arrays numpy tensorflow