API名称 | paddle.frac |
---|---|
提交作者 | Asthestarsfalll |
提交时间 | 2022-03-19 |
版本号 | V1.0 |
依赖飞桨版本 | develop |
文件名 | 20200319_api_design_for_frac.md |
frac用于计算输入中每个元素的分数部分。
为 Paddle 新增 frac 数学计算API。
Paddle支持frac数学计算API。
飞桨目前并无此API,相关API有paddle.trunc
,将输入 Tensor 的小数部分置0,返回置0后的 Tensor ,如果输入 Tensor 的数据类型为整数,则不做处理。
因此paddle.frac
的实现可在Python端调用trunc
和elementwise_sub
的C++ OP组合实现。
Pytorch中有API torch.frac()
和Tensor.frac()
,介绍为:
Computes the fractional portion of each element in input.
Pytorch中实际上使用输入tensor减去trunc后的结果得到输出,一些相关代码如下:
__device__ double frac(double x) {
return x - trunc(x);
}
__device__ float frac(float x) {
return x - trunc(x);
}
double frac(double x) {
return x - trunc(x);
}
float fracf(float x) {
return x - truncf(x);
}
template <typename T>
T frac(T x) {
return x - std::trunc(x);
}
未找到相关实现,在该文件注释中的有所提及,如下:
frac = x - floor(x)
Pytorch与TensorFlow思路一致。
API设计为paddle.frac(x, name=None)
和Tensor.frac(x, name=None)
使用现有C++ Op组合完成,无需设计底层OP
使用trunc
与elementwise_sub
组合实现,实现位置为paddle/tensor/math.py
与trunc
,sum
和nansum
等方法放在一起:
- 首先使用
trunc
获取输入tensor的整数部分; - 再用输入x减去上一步得到的整数部分即可获取小数部分。
测试考虑的case如下:
- 在动态图、静态图下,与numpy结果的一致性。
方案主要依赖现有Paddle C++ Op组合而成,工期上可以满足在当前版本周期内开发完成。
为独立新增API,对其他模块没有影响
无
无