【发布时间】:2018-05-09 04:25:58
【问题描述】:
我无法在不丢失精度的情况下将 double 转换为 Nd4j.INDArray。
double[] weight = new double[]{-0.13404223866376802,-0.11294084872465669,0.11232944517596409,-0.01687720880184701,0.13288394029423414,-0.06916641552096867,0.1518882606786481};
INDArray array = Nd4j.create(weight, new int[]{1, 7});
System.out.println(array);
输出是
[-0.13, -0.11, 0.11, -0.02, 0.13, -0.07, 0.15]
期望的输出应该是
[-0.13404223866376802,-0.11294084872465669,0.11232944517596409,-0.01687720880184701,0.13288394029423414,-0.06916641552096867,0.1518882606786481]
如何进行全精度转换?
【问题讨论】:
-
@LeoAso 所说的背后的重点是 INDArray 并没有实际上截断您的数据——它存储和操作整个双精度数。这正是它的 toString() 方法所做的。他的回答允许您以所需的精度格式化 INDArray。
-
@TheAIArchitect 这很有趣。我刚刚使用了 INDArray 的
toDoubleMatrix并检查了这个。看来我得到的结果与用于创建 INDArray 的原始 double[][] 不同,从小数点后第 7 位开始。看起来数据被截断为FloatBuffer,当转换回Double[][]时,随机垃圾被添加到末尾。