【问题标题】:DL4j - Rounded floating points when converting from Java Array to INDArrayDL4j - 从 Java Array 转换为 INDArray 时的舍入浮点数
【发布时间】:2021-05-17 13:20:09
【问题描述】:

从 Java 数组转换为 INDArray 会导致值四舍五入到最接近的近似值

实际行为

来自 Java 数组 - [0.0025249954778701,-0.0046458570286632,0.0052295182831585,-0.0014667856739834,-0.0044226963073015,0.0073519190773368,-0.0003814829979092,-0.0084274942055345,-0.0040481365285814,0.0082860253751278] P>

到 INDArray- [0.00, -0.00, 0.01, -0.00, -0.00, 0.01, -0.00, -0.01, -0.00, 0.01]

预期行为

来自 Java 数组 - [0.0025249954778701,-0.0046458570286632,0.0052295182831585,-0.0014667856739834,-0.0044226963073015,0.0073519190773368,-0.0003814829979092,-0.0084274942055345,-0.0040481365285814,0.0082860253751278] P>

到 INDArray- [0.0025249954778701,-0.0046458570286632,0.0052295182831585,-0.0014667856739834,-0.0044226963073015,0.0073519190773368,-0.0003814829979092,-0.0084274942055345,-0.0040481365285814,0.0082860253751278] P>

下面是代码

var (left, right) = inoc.splitAt(7840)
var bias :INDArray = Nd4j.create(right);
var weights :INDArray = Nd4j.create(left);

【问题讨论】:

  • 欢迎来到南非。仅供参考,发布时有很多规则等,人们可能会否决这个问题,因为它很容易解决。其次,你甚至没有展示你的代码造成了这个问题。

标签: dl4j


【解决方案1】:

最新版本的默认数据类型是浮点数。 这是由于内存的原因。

如果这是您想要的,请确保以双精度创建数组。

【讨论】:

  • 感谢您的回复。在我的情况下,创建具有双精度的 INDArray 不起作用,我仍然看到四舍五入的值。另外,我想设置只接受浮点的模型的梯度,因此,即使它转换为保留四舍五入值的双指针,它也没什么用。知道我是否可以在保留实际值的同时转换为浮点 INDArray?
  • 只要一切都是双数组,就应该保留底层值。您可以使用 array.data().asDouble(); 获取数据。如果你想要一个双向量。检查这些值或在调试器中检查以查看较低精度的值。如果一切都已经是两倍,那么数字不仅会消失,而且 toStrings() 有时可能会被四舍五入。
猜你喜欢
  • 1970-01-01
  • 2018-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
相关资源
最近更新 更多