tensorflow / tensorflow/java

Modular Java app can't create tensor object

未关闭
#509 3 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

主要语言
Java
星标
928
派生
227
PR 合并指标
30 天内没有已合并 PR

描述

System information

  • Have I written custom code (as opposed to using a stock example script provided in TensorFlow): YES
  • OS Platform and Distribution (e.g., Linux Ubuntu 16.04 x86_64): Windows 10 Pro
  • TensorFlow installed from (source or binary): Gradle dependence
  • TensorFlow version (use command below): 2.10.1
  • Java version (i.e., the output of java -version): 17.0.2
  • Java command line flags (e.g., GC parameters):
  • Python version (if transferring a model trained in Python):
  • Bazel version (if compiling from source):
  • GCC/Compiler version (if compiling from source):
  • CUDA/cuDNN version: 12.3
  • GPU model and memory:

Describe the current behavior
Java Gradle project, as built from IntelliJ IDEA pattern, repeatedly reports a fatal warning on attempt to create a tensor object. See the code and log below. The error raises exception that is effectively intercepted by JavaFX runtime.
The project was found having Java module support. After this support has been removed from the project, code runs just fine. However, modularity is highly desired for the application.

Describe the expected behavior

After module access permissions (exports, open's) get fixed in tensorflow-core-platform, etc., all Java objects should be created just fine, as they are in non-modular edition of the project.

Code to reproduce the issue

excerpt from file src/main/java/module-info.java:

module com.varankin.ocrc.jfx
{
    requires org.tensorflow.ndarray;
    requires org.tensorflow;
}

excerpt from file build.gradle (remove shown lines to let code run with no error):

plugins 
{
    id 'org.javamodularity.moduleplugin' version '1.8.12'
}
dependencies 
{
    implementation 'org.tensorflow:tensorflow-core-platform:0.5.0'
}

excerpt from file src/main/java/com/varankin/ocrc:

package com.varankin.ocrc;
import org.tensorflow.*;
import org.tensorflow.ndarray.*;
import org.tensorflow.types.TFloat32;
import org.tensorflow.types.TInt32;

public class Inferencer
{
    public void image( float[][] data )
    {
            FloatNdArray data_nda = NdArrays.ofFloats( Shape.of( data.length, data[0].length ) );
            data_nda.elements( /* 0, */ 1 ).forEachIndexed( (ix,nda) -> nda.setFloat( data[(int)ix[0]][(int)ix[1]] ) );
            // OK before this line; any next line fails; 
            TInt32 tdata_is = TInt32.scalarOf( 24 );
            TInt32 tdata_i = TInt32.tensorOf( Shape.of( 24, 24 ) );
            TFloat32 tdata_0 = TFloat32.tensorOf( Shape.of( 24, 24 ) );
            tdata_0.set( data_nda );
            TFloat32 tdata = TFloat32.tensorOf( data_nda );
    }
}

Other info / logs

Warning: Could not create an instance of class org.tensorflow.internal.c_api.presets.tensorflow: java.lang.IllegalAccessException: class org.bytedeco.javacpp.ClassProperties (in module org.bytedeco.javacpp) cannot access class org.tensorflow.internal.c_api.presets.tensorflow (in module org.tensorflow) because module org.tensorflow does not export org.tensorflow.internal.c_api.presets to module org.bytedeco.javacpp

Call stack has been wiped off by JavaFX, below is manual reproduction

  • com.varankin.ocrc.Inferencer.image
  • org.tensorflow.types.TInt32.scalarOf:44 -- same for TFloat32 methods
  • org.tensorflow.Tensor.of:128
  • org.tensorflow.RawTensor.allocate:109

Please do not hesitate to ask for runnable example if needed. Current project cannot be presented as-is because of IP protection requirements, and because it's bulky.

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

先从 src/main/java/module-info.java 和 build.gradle 开始,然后检查涉及 IllegalAccessException 的 TensorFlow Java 模块声明。通过 com.varankin.ocrc.Inferencer.image 以及 TInt32/TFloat32 张量创建调用重现该故障。当模块化 Gradle 应用能够创建张量且不再出现报告的访问警告时,即表示完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
java
领域
machine-learning
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
28/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。