提交 340c0f39 编写于 作者: A A. Unique TensorFlower 提交者: TensorFlower Gardener

Rename scalar_round_op_google -> scalar_round_half_to_even_op to document its semantics.

PiperOrigin-RevId: 286034751
Change-Id: I11f7a8a4407163b8fe75f236a4e9f8cf8323376e
上级 ab1c4168
......@@ -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>();
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册