0

我正在构建一个原始神经网络来模拟与门。损失函数是 MSE:

def mse(predicted, desired): 
    return np.square(np.subtract(predicted, desired)).mean()

下面有一个prediction期望的输出(又名标签):

predicted = np.array
    ([[0.5000, 0.5000],   # 0 AND 0
      [0.4721, 0.5279],   # 0 AND 1
      [0.3049, 0.6951],   # 1 AND 0
      [0.3345, 0.6655]])  # 1 AND 1

desired = np.array
    ([[1, 0],   # False
      [1, 0],   # False
      [1, 0],   # False
      [0, 1]])  # True

每一行(在上述两个矩阵中)都表示一个案例。我想像这样将所有案例保持在一起,而不是将它们分成向量。问题是,我需要单独处理每一行。

我试图得到以下结果,但我不能:

returned output = 
    [0.2500,  # 1st CASE ERROR
     0.2786,  # 2nd CASE ERROR
     0.4831,  # 3rd CASE ERROR 
     0.1118]  # 4th CASE ERROR

我尝试了以下功能...

np.apply_along_axis(mse, 1, predicted, desired)

但它不起作用,因为“欲望”是作为整个矩阵传递的,而不是一次传递一行。那么,有没有办法在不改变“mse 函数”实现或循环的情况下实现这一点?

4

1 回答 1

0

因为您的所有数据都在格式良好的 ndarray 中,所以您可以让 NumPy 完成所有繁重的工作。在这种情况下,您可以将for循环转换为沿数组维度之一的缩减。

np.square(np.subtract(predicted, desired)).mean(1)

或者

((predicted-desired)**2).mean(1)

这是更具可读性的国际海事组织。

于 2020-08-15T13:14:06.047 回答