Skip to content
This repository was archived by the owner on Jul 1, 2023. It is now read-only.

Commit 4b505bf

Browse files
Shashi456rxwei
authored andcommitted
Add mean absolute percentage error (#228)
1 parent de7fc0b commit 4b505bf

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

Sources/TensorFlow/Loss.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,19 @@ public func meanAbsoluteError<Scalar: TensorFlowFloatingPoint>(
7777
return abs(expected - predicted).mean()
7878
}
7979

80+
/// Returns the mean absolute percentage error between predictions and expectations.
81+
///
82+
/// - Parameters:
83+
/// - predicted: Predicted outputs from a neural network.
84+
/// - expected: Expected values, i.e. targets, that correspond to the correct output.
85+
@differentiable(wrt: predicted)
86+
public func meanAbsolutePercentageError<Scalar: TensorFlowFloatingPoint>(
87+
predicted: Tensor<Scalar>, expected: Tensor<Scalar>
88+
) -> Tensor<Scalar> {
89+
let diff = abs((expected - predicted) / abs(expected))
90+
return 100 * diff.mean()
91+
}
92+
8093
/// Returns the hinge loss between predictions and expectations.
8194
///
8295
/// - Parameters:

Tests/TensorFlowTests/LossTests.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,15 @@ final class LossTests: XCTestCase {
6565
assertElementsEqual(expected: Tensor(expectedLoss), actual: loss)
6666
}
6767

68+
func testMeanAbsolutePercentageError() {
69+
let predicted = Tensor<Float>([1, 2, 3, 4, 5, 6, 7, 8])
70+
let expected = Tensor<Float>([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8])
71+
72+
let loss = meanAbsolutePercentageError(predicted: predicted, expected: expected)
73+
let expectedLoss: Float = 900.0
74+
assertElementsEqual(expected: Tensor(expectedLoss), actual: loss)
75+
}
76+
6877
func testMeanSquaredErrorGrad() {
6978
let predicted = Tensor<Float>(shape: [2, 4], scalars: [1, 2, 3, 4, 5, 6, 7, 8])
7079
let expected = Tensor<Float>(
@@ -232,6 +241,7 @@ final class LossTests: XCTestCase {
232241
("testMeanSquaredErrorGrad", testMeanSquaredErrorGrad),
233242
("testMeanSquaredLogarithmicError", testMeanSquaredLogarithmicError),
234243
("testMeanAbsoluteError", testMeanAbsoluteError),
244+
("testMeanAbsolutePercentageError", testMeanAbsolutePercentageError),
235245
("testHingeLoss", testHingeLoss),
236246
("testKullbackLeiblerDivergence", testKullbackLeiblerDivergence),
237247
("testCategoricalHingeLoss", testCategoricalHingeLoss),

0 commit comments

Comments
 (0)