Rename scalar_round_op_google -> scalar_round_half_to_even_op to document its semantics.
PiperOrigin-RevId: 286034751 Change-Id: I11f7a8a4407163b8fe75f236a4e9f8cf8323376e
This commit is contained in:
parent
ab1c41685c
commit
340c0f3905
tensorflow/core/kernels
@ -546,7 +546,7 @@ struct functor_traits<google_floor_mod<Scalar>> {
|
||||
#endif
|
||||
|
||||
template <typename Scalar, bool IsInteger = Eigen::NumTraits<Scalar>::IsInteger>
|
||||
struct scalar_round_op_google {
|
||||
struct scalar_round_half_to_even_op {
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar
|
||||
operator()(const Scalar& x) const {
|
||||
EIGEN_STATIC_ASSERT((!NumTraits<Scalar>::IsComplex),
|
||||
@ -569,7 +569,7 @@ struct scalar_round_op_google {
|
||||
};
|
||||
|
||||
template <typename Scalar>
|
||||
struct scalar_round_op_google<Scalar, true> {
|
||||
struct scalar_round_half_to_even_op<Scalar, true> {
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar
|
||||
operator()(const Scalar& x) const {
|
||||
return x;
|
||||
@ -581,7 +581,7 @@ struct scalar_round_op_google<Scalar, true> {
|
||||
};
|
||||
|
||||
template <typename Scalar>
|
||||
struct functor_traits<scalar_round_op_google<Scalar>> {
|
||||
struct functor_traits<scalar_round_half_to_even_op<Scalar>> {
|
||||
enum {
|
||||
Cost = Eigen::NumTraits<Scalar>::IsInteger ? 0
|
||||
: 4 * NumTraits<Scalar>::AddCost,
|
||||
@ -960,12 +960,12 @@ template <typename T>
|
||||
struct floor : base<T, Eigen::internal::scalar_floor_op<T>> {};
|
||||
|
||||
template <typename T>
|
||||
struct round : base<T, Eigen::internal::scalar_round_op_google<T>> {};
|
||||
struct round : base<T, Eigen::internal::scalar_round_half_to_even_op<T>> {};
|
||||
|
||||
template <typename T>
|
||||
struct ceil : base<T, Eigen::internal::scalar_ceil_op<T>> {};
|
||||
|
||||
/** this should go in Eigen
|
||||
/** TODO(tokarip): This should go in Eigen
|
||||
* \brief Template functor to compute the round to int value of a scalar
|
||||
*/
|
||||
template <typename Scalar>
|
||||
|
@ -81,7 +81,8 @@ void ClampScaleAndRound(const Device& d, ConstVec input, T min_range,
|
||||
switch (round_mode) {
|
||||
case ROUND_HALF_TO_EVEN:
|
||||
ClampScaleAndRound(d, input, min_range, max_range, scale, inverse_scale,
|
||||
Eigen::internal::scalar_round_op_google<T>(), output);
|
||||
Eigen::internal::scalar_round_half_to_even_op<T>(),
|
||||
output);
|
||||
break;
|
||||
case ROUND_HALF_UP:
|
||||
ClampScaleAndRound(d, input, min_range, max_range, scale, inverse_scale,
|
||||
@ -107,7 +108,7 @@ void ScaleAndRound(const Device& d, ConstVec input, T scale, T inverse_scale,
|
||||
switch (round_mode) {
|
||||
case ROUND_HALF_TO_EVEN:
|
||||
ScaleAndRound(d, input, scale, inverse_scale,
|
||||
Eigen::internal::scalar_round_op_google<T>(), output);
|
||||
Eigen::internal::scalar_round_half_to_even_op<T>(), output);
|
||||
break;
|
||||
case ROUND_HALF_UP:
|
||||
ScaleAndRound(d, input, scale, inverse_scale,
|
||||
|
@ -276,16 +276,15 @@ class QuantizeV2Op : public OpKernel {
|
||||
min_range = min_output_value / scale_factor;
|
||||
max_range = max_output_value / scale_factor;
|
||||
if (round_mode_ == ROUND_HALF_TO_EVEN) {
|
||||
// scalar_round_op_google implements "round-half-to-even".
|
||||
output.device(d) =
|
||||
(input.cwiseMin(max_range).cwiseMax(min_range) * scale_factor)
|
||||
.unaryExpr(Eigen::internal::scalar_round_op_google<float>())
|
||||
.unaryExpr(
|
||||
Eigen::internal::scalar_round_half_to_even_op<float>())
|
||||
.template cast<T>();
|
||||
} else if (round_mode_ == ROUND_HALF_AWAY_FROM_ZERO) {
|
||||
// scalar_round_op implements "round-half-away-from-zero".
|
||||
output.device(d) =
|
||||
(input.cwiseMin(max_range).cwiseMax(min_range) * scale_factor)
|
||||
.unaryExpr(Eigen::internal::scalar_round_op<float>())
|
||||
.round()
|
||||
.template cast<T>();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user