mirror of
https://github.com/ml-explore/mlx.git
synced 2025-12-16 01:49:05 +08:00
Precise sigmoid (#2659)
* bump patch * Sigmoid matches PyTorch and is more precise on tails
This commit is contained in:
@@ -77,7 +77,8 @@ struct Real {
|
||||
struct Sigmoid {
|
||||
template <int N, typename T>
|
||||
Simd<T, N> operator()(Simd<T, N> x) {
|
||||
return 1.0f / (1.0f + simd::exp(-x));
|
||||
auto y = 1.0f / (1.0f + simd::exp(simd::abs(x)));
|
||||
return simd::select(x < Simd<T, N>{0}, y, Simd<T, N>{1} - y);
|
||||
}
|
||||
SINGLE()
|
||||
};
|
||||
|
||||
@@ -257,8 +257,8 @@ struct Round {
|
||||
struct Sigmoid {
|
||||
template <typename T>
|
||||
__device__ T operator()(T x) {
|
||||
T y = 1 / (1 + exp(-abs(x)));
|
||||
return (x < 0) ? 1 - y : y;
|
||||
T y = 1 / (1 + exp(abs(x)));
|
||||
return (x < 0) ? y : 1 - y;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -309,8 +309,8 @@ struct Round {
|
||||
struct Sigmoid {
|
||||
template <typename T>
|
||||
T operator()(T x) {
|
||||
auto y = 1 / (1 + metal::exp(-metal::abs(x)));
|
||||
return (x < 0) ? 1 - y : y;
|
||||
auto y = 1 / (1 + metal::exp(metal::abs(x)));
|
||||
return (x < 0) ? y : 1 - y;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user