 
 template <typename T>
 struct PNormGradFunctor {
-  HOSTDEVICE explicit inline PNormGradFunctor(float porder) {
+  HOSTDEVICE explicit inline PNormGradFunctor(float porder, float eps) {
     this->porder = static_cast<T>(porder - 1.);
+    this->eps = static_cast<T>(eps);
   }
   template <typename Context,
             typename X,

        dev_ctx, in_x, in_norm, in_norm_dy, out_dx, functor, dims, reduce_all);

  } else {
    auto functor = PNormGradFunctor<T>(porder);
    funcs::LaunchReduceGradKernel<Context, T, PNormGradFunctor<T>>(
        dev_ctx, in_x, in_norm, in_norm_dy, out_dx, functor, dims, reduce_all);
  }

                  DY* dy,
                  const Dim& dim,
                  int size) {
    dx->device(place) =
        (*x).abs().pow(this->porder) * (*x).sign() * dy->broadcast(dim) *
        (*y + y->constant(eps)).pow(-this->porder).broadcast(dim);
  }
  T porder;
  T eps;
};

template <typename T, typename Context>
