- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想要一种方法来将 TensorFlow 中 float 的精度(大约:截断尾数)降低到定义的完整范围内的任意位数。我不需要完全以降低精度编写代码(如 tf.float16),而是想出一系列操作来降低张量的精度,同时保留其原始类型(例如 tf.float32)。
例如,如果完整范围是 0 到 1,精度是 8 位,则 0.1234 将变为 round(0.1234 * 256)/256 = 0.125。这使用简单的舍入。
我还想进行统计舍入,其中在每个方向上舍入的概率与值与该值的距离成正比。例如,0.1234 * 256 = 31.5904,在 59% 的情况下会四舍五入到 32/256,在 41% 的情况下会四舍五入到 31/256。
额外问题:如何获取现有图并对其进行修改以在每次卷积后添加舍入?
最佳答案
唯一棘手的部分是为舍入操作提供梯度。已经实现的 tf.round
没有实现渐变。但是您可以实现自己的舍入操作(统计或简单舍入都有效),如下所示: Tensorflow: How to write op with gradient in python?
你可以简单地使用的地方:
grad(round(T)) = round(grad(T))
现在,一旦您有了个性化的round
操作来转移梯度,您就可以简单地执行以下操作:
def reduce_precision(tensor, precision_bits=8):
N = 2**precision_bits
return round(N * tensor)/N
对于随机舍入,您可以创建一个简单的 numpy 函数,例如
def stochastic_round(x):
r,f = np.modf(x)
return r + np.random.binomial(1,r)
然后按 How to make a custom activation function with only Python in Tensorflow? 所示对其进行 tensoflow 化处理
在这里你可以将它的梯度操作定义为
def grad_stochastic_round(op, grad):
return stochastic_round(grad)
关于python - 如何在 TensorFlow 中模拟降低精度的 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42964980/
关于这个话题已经说了很多,但是我找不到我的问题的确切答案。 JavaScript 无法准确表示 0.1 等小数,这是可以理解的。 例如,由于乘法运算期间发生舍入误差,这是正确的: 0.1 * 3 ==
在 zig 中,可以使用“{d}”以十进制表示法打印浮点值。这将自动以全精度打印该值。有没有办法指定位数?是针对每个值,还是作为某种全局设置? 最佳答案 这将限制小数点后的位数,四舍五入和零填充: f
我正在进行的项目需要高精度。减法时我遇到的问题在这里说明: >> 1-0.9999999999999999 ans = 1.1102e-16 >> 1-0.99999999999999999 ans
是否可以使变量本身的精度成为将在运行时定义的变量? 说,如果我尝试编译: SUBROUTINE FOO( VARIABLE, PRECISION_VALUE ) IMPLICI
我正在查询 SQLite 数据库以获取纬度/经度详细信息。 SELECT * FROM tblMain where latitude > -33.866 and latitude 151.20
我一直使用下划线将整数定义为 Fortran 中的特定类型。 下面是一段代码,用于演示 1_8 的含义,例如: program main implicit none integer(2)
我正在寻找一种方法来告诉 pint 要打印多少个有效数字。例如,当我输入以下内容时: import pint ureg = pint.UnitRegistry() print(3*ureg.m /9)
我正在从事一个项目,目标是从山上追踪动物。在第一个实地考察季中,我们使用了 OpenTags 和经过校准的摄像头,虽然可以正常工作,但需要大量的处理/校准,而且至关重要的是,当系统出现问题时无法提供任
在 JavaScript 中有没有一种方法可以确定一个数除以另一个数是否会得到整数?就像 18.4/0.002 给我们 9200,但是 18.4/0.1 给我们 183.99999999999997。
我正在尝试使用 Big.js 在 javascript 中完成此计算 r = (a * b)/ sqrt( ( a*sin(θ) )^2 + ( b*cos(θ) )^2 ) 我也试过 math.js
我有这个片段着色器代码,它在 iOS 模拟器(非视网膜)和 iPad2(非视网膜)之间显示不同: highp vec2 textCoord; textCoord.x = gl_Fr
这个问题在这里已经有了答案: C++ calculating more precise than double or long double (2 个答案) 关闭 6 年前。 是否有任何浮点类型在小
我似乎一直困惑的三个问题: 为什么代码是 x & ~077比这行代码 x & 0177700 更好。是因为精度损失较小吗? 为什么此代码对于设置数字中的第 5 位不正确? num = num + 0x
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Precision of Floating Point 我正在尝试使用一些 float 来计算概率,但我的最
由于微 Controller 的精度,我定义了一个包含两个 float 比率的符号,而不是直接写结果。 #define INTERVAL (0.01F/0.499F) 代替 #defi
我试图比较这 3 种搜索算法,起初我使用 time.h 库但没有任何反应,输出始终是 0.00000 秒。现在我试图在循环中使用一些计数器。但我在这里也有问题, 任何人都可以帮我处理代码吗? 这是我的
char buf[10]; int counter, x = 0; snprintf (buf, sizeof buf , "%.100d%n", x, &counter); printf("Coun
我注意到在评估向量时对我来说是不可预测的行为。直接执行它与在循环中进行索引似乎是完全不同的。谁能帮我解决这个问题?我知道可能在它如何进行每个操作中都有解释,所以我需要一些关于如何查找它的键 多谢指教提
我想在我的应用程序中使用精确的 gps 定位。所以我遵循了一个简单的教程(LocationManager 的基本用法,明确要求 GPS 提供商,要求更新 0 ms,0 m)并创建了一个应用程序。我对更
float 在 1.0f 和 0.0f 之间有多少位精度,这样每个值都可以唯一表示? 例如,如果第一个小数 float 不能表示 0.13f,答案就是 float 只有一位精度。 最佳答案 std::
我是一名优秀的程序员,十分优秀!