You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven构建DL4J Java应用依赖配置及模型开发问题咨询

Maven集成DL4J、打包优化与简单分类任务实现方案

核心问题排查

包体积暴涨到500MB、未调用依赖就崩溃的问题,由三个错误操作导致:

  • 手动导入本地Jar包,混用了1.0.0-alpha2和1.0.0-M2两个不兼容的DL4J版本,造成依赖冲突
  • 手动引入了完全不需要的cassandra-all等冗余依赖,同时Maven默认拉取了Android、iOS等移动端的无关依赖
  • Shade插件配置缺失SPI资源合并规则,DL4J/ND4J依赖的服务描述文件被覆盖,导致后端加载失败直接崩溃
  • 依赖配置错误使用了nd4j-native而非跨平台的nd4j-native-platform,同时未做依赖裁剪

一、排除移动端无关依赖的配置方法

所有Android、iOS相关依赖均为JavaCPP绑定的原生平台库,直接在依赖中通过全局排除规则过滤即可,不需要手动删除文件:

  1. 先彻底删除项目中手动创建的libs文件夹,移除所有手动添加的项目结构依赖,所有依赖统一通过Maven管理
  2. 在pom.xml的依赖配置中添加排除规则,过滤所有安卓、iOS相关的包,同时排除冗余的cassandra、spark等可选组件

二、正确的pom配置参考

基础属性配置

<properties>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <dl4j-master.version>1.0.0-M2</dl4j-master.version>
    <maven-shade-plugin.version>3.4.1</maven-shade-plugin.version>
</properties>

注意:将shade插件升级到3.x版本,2.4.3版本存在资源处理的已知bug

依赖配置

<dependencies>
    <dependency>
        <groupId>org.deeplearning4j</groupId>
        <artifactId>deeplearning4j-core</artifactId>
        <version>${dl4j-master.version}</version>
        <exclusions>
            <!-- 排除安卓、iOS相关依赖 -->
            <exclusion>
                <groupId>org.bytedeco</groupId>
                <artifactId>*</artifactId>
                <classifier>android-*</classifier>
            </exclusion>
            <exclusion>
                <groupId>org.bytedeco</groupId>
                <artifactId>*</artifactId>
                <classifier>ios-*</classifier>
            </exclusion>
            <!-- 排除冗余可选依赖 -->
            <exclusion>
                <groupId>org.apache.cassandra</groupId>
                <artifactId>*</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.apache.spark</groupId>
                <artifactId>*</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- 跨平台原生后端,自动包含Windows/Linux/macOS三平台桌面端原生库 -->
    <dependency>
        <groupId>org.nd4j</groupId>
        <artifactId>nd4j-native-platform</artifactId>
        <version>${dl4j-master.version}</version>
        <exclusions>
            <!-- 再次排除移动端依赖 -->
            <exclusion>
                <groupId>org.bytedeco</groupId>
                <artifactId>*</artifactId>
                <classifier>android-*</classifier>
            </exclusion>
            <exclusion>
                <groupId>org.bytedeco</groupId>
                <artifactId>*</artifactId>
                <classifier>ios-*</classifier>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

Shade插件正确配置

配置资源合并规则,避免SPI服务文件被覆盖导致启动崩溃:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>${maven-shade-plugin.version}</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <!-- 合并META-INF/services下的SPI文件,解决DL4J后端加载失败问题 -->
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                            <!-- 指定主类,按需修改为你自己的启动类全限定名 -->
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.yourpackage.MainClass</mainClass>
                            </transformer>
                        </transformers>
                        <filters>
                            <filter>
                                <artifact>*:*</artifact>
                                <excludes>
                                    <exclude>META-INF/*.SF</exclude>
                                    <exclude>META-INF/*.DSA</exclude>
                                    <exclude>META-INF/*.RSA</exclude>
                                </excludes>
                            </filter>
                        </filters>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

按以上配置打包后,Jar包体积会稳定在120M-150M区间,包含三平台桌面端原生计算库,可直接在Windows、Linux、macOS上运行,不会出现启动崩溃问题。


三、9分类任务实现说明

该任务属于典型的结构化数据多分类任务,输入为整数、布尔值特征,输出固定9种结果,实现难度很低:

数据量要求

如果输入特征维度在10-50区间(常规的整数、布尔字段组合),每类标注样本准备1000-5000条即可,总样本量1万-5万就能达到95%以上的准确率;如果特征维度超过100,总样本量加到5万-10万完全足够,不需要更大规模的数据集。

模型结构选择

不需要复杂的深度学习结构,用2-3层的简单MLP(多层感知机)即可:

  • 输入层:节点数和特征维度对齐,布尔值转0/1,整数值做最小-最大归一化到0-1区间
  • 隐藏层:1-2层,每层节点数32-128即可,用ReLU激活函数
  • 输出层:9个节点,用Softmax激活函数,对应9种分类结果,训练时使用负对数似然损失函数

推理性能

这类小模型在普通CPU上的单次推理耗时为1-10微秒,每秒可完成10万-100万次推理,完全不需要担心性能问题。

结果输出逻辑

训练时建立分类索引和输出数组的映射关系,比如索引0对应new int[]{0,1}、索引1对应new int[]{1,0},推理时拿到输出层的9个概率值,按概率从高到低排序,对应映射回int数组即可得到需要的排序结果。


内容的提问来源于stack exchange,提问作者user17364069

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 00:51:27