1

我正在使用 deep4j 制作程序,但在尝试初始化程序时遇到了库问题。据说我无法加载库,除了我似乎已经在下面的 Java 代码中手动设置了库路径。

Failed to load for libnd4jcpu: java.lang.UnsatisfiedLinkError: no libnd4jcpu in java.library.path

我尝试手动设置库加载路径,但仍然无法正常工作。

    String libPathProperty = System.getProperty("java.library.path");
    System.setProperty("java.library.path", libPathProperty + ":/users/<user>/.javacpp/cache");
    System.out.println(System.getProperty("java.library.path"));
    System.setProperty("org.bytedeco.javacpp.logger.debug","true");

我相信我的 Pom 正在遵循https://nd4j.org/getstarted中的步骤。我把它贴在下面。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.com</groupId>
<version>0.1.0</version>
<name>Example</name>
<url>example.com</url>
<description>Example</description>
<artifactId>Examole</artifactId>
<packaging>jar</packaging>

<organization>
    <name>example.com</name>
</organization>

<properties>

    <!-- protobuf paths -->
    <protobuf.input.directory>${project.basedir}/src/main/java/com/proto</protobuf.input.directory>
    <protobuf.output.directory>${project.basedir}/src/main/java</protobuf.output.directory>
    <project.build.dir>${project.basedir}/build</project.build.dir>

    <!-- library versions -->
    <build-helper-maven-plugin.version>1.9.1</build-helper-maven-plugin.version>
    <maven-antrun-plugin.version>1.8</maven-antrun-plugin.version>
    <maven-dependency-plugin.version>2.10</maven-dependency-plugin.version>
    <maven-shade-plugin.version>2.4.2</maven-shade-plugin.version>
    <os-maven-plugin.version>1.4.1.Final</os-maven-plugin.version>
    <protobuf.version>3.0.0</protobuf.version>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <nd4j.version>0.9.1</nd4j.version>
    <arbiter.version>0.9.1</arbiter.version>
    <!-- nlp versions -->
    <stanfordnlp.version>3.9.1</stanfordnlp.version>
    <outputDirectory>/users/example/workspace/examplet/build/classes</outputDirectory>
</properties>


<dependencies>


    <!--Standard Packages-->
    <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-java</artifactId>
        <version>${protobuf.version}</version>
    </dependency>

    <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
        <version>1.1.1</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>


    <!--NLP Packages-->
    <dependency>
        <groupId>edu.stanford.nlp</groupId>
        <artifactId>stanford-corenlp</artifactId>
        <version>${stanfordnlp.version}</version>
    </dependency>

    <dependency>
        <groupId>edu.stanford.nlp</groupId>
        <artifactId>stanford-corenlp</artifactId>
        <version>${stanfordnlp.version}</version>
        <classifier>models</classifier> <!--  will get the dependent model jars -->
    </dependency>


    <!--ML Packages-->

    <dependency>
        <groupId>nz.ac.waikato.cms.weka</groupId>
        <artifactId>weka-stable</artifactId>
        <version>3.8.0</version>
    </dependency>

    <dependency>
        <groupId>nz.ac.waikato.cms.weka</groupId>
        <artifactId>LibSVM</artifactId>
        <version>1.0.10</version>
    </dependency>

    <!--DL Packages-->

    <dependency>
        <groupId>org.deeplearning4j</groupId>
        <artifactId>deeplearning4j-nlp</artifactId>
        <version>0.9.1</version>
    </dependency>

    <dependency>
        <groupId>org.nd4j</groupId>
        <artifactId>nd4j-native-platform</artifactId>
        <version>${nd4j.version}</version>
    </dependency>

    <dependency>
        <groupId>org.nd4j</groupId>
        <artifactId>nd4j-native</artifactId>
        <version>${nd4j.version}</version>
    </dependency>

    <dependency>
        <groupId>org.datavec</groupId>
        <artifactId>datavec-api</artifactId>
        <version>1.0.0-alpha</version>
    </dependency>

    <!--BLAS is used as a backend for libnd4j computations-->
    <dependency>
        <groupId>org.bytedeco.javacpp-presets</groupId>
        <artifactId>openblas</artifactId>
        <version>0.2.20-1.4.1</version>
    </dependency>

    <dependency>
        <groupId>org.bytedeco</groupId>
        <artifactId>javacpp</artifactId>
        <version>1.4.1</version>
    </dependency>

    <!--Tuning Packages-->

    <dependency>
        <groupId>org.deeplearning4j</groupId>
        <artifactId>arbiter-ui_2.11</artifactId>
        <version>${arbiter.version}</version>
    </dependency>

    <dependency>
        <groupId>org.deeplearning4j</groupId>
        <artifactId>arbiter-deeplearning4j</artifactId>
        <version>${arbiter.version}</version>
    </dependency>

    <!--Logging Packages-->

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-jdk14</artifactId>
        <version>1.7.25</version>
    </dependency>

</dependencies>

<build>
    <extensions>
        <!-- provides os.detected.classifier (i.e. linux-x86_64, osx-x86_64) property -->
        <extension>
            <groupId>kr.motd.maven</groupId>
            <artifactId>os-maven-plugin</artifactId>
            <version>${os-maven-plugin.version}</version>
        </extension>
    </extensions>

    <directory>${project.build.dir}/classes</directory>
    <outputDirectory>${outputDirectory}</outputDirectory>

    <plugins>

        <!-- copy protoc binary into build directory -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>${maven-dependency-plugin.version}</version>
            <executions>
                <execution>
                    <id>copy-protoc</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>com.google.protobuf</groupId>
                                <artifactId>protoc</artifactId>
                                <version>${protobuf.version}</version>
                                <classifier>${os.detected.classifier}</classifier>
                                <type>exe</type>
                                <overWrite>true</overWrite>
                                <outputDirectory>${project.build.dir}</outputDirectory>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <!-- compile proto file into java files. -->
        <plugin>
            <groupId>com.github.os72</groupId>
            <artifactId>protoc-jar-maven-plugin</artifactId>
            <version>3.5.1.1</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <!-- <includeDirectories> <include>src/main/protobuf</include> </includeDirectories> -->
                        <inputDirectories>
                            <include>src/main/protobuf</include>
                        </inputDirectories>
                        <!-- Create java files. And put them in the src/main/java directory. -->
                        <outputTargets>
                            <outputTarget>
                                <type>java</type>
                                <outputDirectory>src/main/java</outputDirectory>
                            </outputTarget>
                        </outputTargets>
                    </configuration>
                </execution>
            </executions>
        </plugin>

         <!--compile proto buffer files using copied protoc binary-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>${maven-antrun-plugin.version}</version>
            <executions>
                <execution>
                    <id>exec-protoc</id>
                    <phase>generate-sources</phase>
                    <configuration>
                        <target>
                            <property name="protoc.filename" value="protoc-${protobuf.version}-${os.detected.classifier}.exe"/>
                            <property name="protoc.filepath" value="${project.build.dir}/${protoc.filename}"/>
                            <chmod file="${protoc.filepath}" perm="ugo+rx"/>
                            <mkdir dir="${protobuf.output.directory}" />
                            <path id="protobuf.input.filepaths.path">
                                <fileset dir="${protobuf.input.directory}">
                                    <include name="**/*.proto"/>
                                </fileset>
                            </path>
                            <pathconvert pathsep=" " property="protobuf.input.filepaths" refid="protobuf.input.filepaths.path"/>
                            <exec executable="${protoc.filepath}" failonerror="true">
                                <arg value="-I"/>
                                <arg value="${protobuf.input.directory}"/>
                                <arg value="--java_out"/>
                                <arg value="${protobuf.output.directory}"/>
                                <arg line="${protobuf.input.filepaths}"/>
                            </exec>
                        </target>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>org.xolstice.maven.plugins</groupId>
            <artifactId>protobuf-maven-plugin</artifactId>
            <version>0.5.0</version>
            <configuration>
                <protocExecutable>/usr/local/bin/protoc</protocExecutable>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>test-compile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

        <!--<plugin>-->
            <!--<groupId>org.apache.maven.plugins</groupId>-->
            <!--<artifactId>maven-shade-plugin</artifactId>-->
            <!--<version>2.1</version>-->
            <!--<executions>-->
                <!--<execution>-->
                    <!--<phase>package</phase>-->
                    <!--<goals>-->
                        <!--<goal>shade</goal>-->
                    <!--</goals>-->
                    <!--<configuration>-->
                        <!--<transformers>-->
                            <!--<transformer-->
                                    <!--implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">-->
                                <!--<mainClass>main.java.com.chatbot.Main</mainClass>-->
                            <!--</transformer>-->
                        <!--</transformers>-->
                    <!--</configuration>-->
                <!--</execution>-->
            <!--</executions>-->
        <!--</plugin>-->

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <configuration>
                <mainClass>com.chatbot.Main</mainClass>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>${maven-shade-plugin.version}</version>
            <configuration>
                <shadedArtifactAttached>true</shadedArtifactAttached>
                <shadedClassifierName>${shadedClassifier}</shadedClassifierName>
                <createDependencyReducedPom>true</createDependencyReducedPom>
                <filters>
                    <filter>
                        <artifact>*:*</artifact>
                        <excludes>
                            <exclude>org/datanucleus/**</exclude>
                            <exclude>META-INF/*.SF</exclude>
                            <exclude>META-INF/*.DSA</exclude>
                            <exclude>META-INF/*.RSA</exclude>
                        </excludes>
                    </filter>
                </filters>

            </configuration>

            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                <resource>reference.conf</resource>
                            </transformer>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>


    </plugins>
</build>
</project>

但是我一直遇到错误,因为它不会加载库。这是我目前的输出:

> Loading class org.nd4j.nativeblas.Nd4jCpu
>     Loading class org.nd4j.nativeblas.Nd4jCpu
>     Loading library libnd4jcpu
>     Failed to load for libnd4jcpu: java.lang.UnsatisfiedLinkError: no libnd4jcpu in java.library.path
>     Loading /users/example/.javacpp/cache/nd4j-native-0.9.1-macosx-x86_64.jar/org/nd4j/nativeblas/macosx-x86_64/libnd4jcpu.dylib
>     Loading /users/example/.javacpp/cache/nd4j-native-0.9.1-macosx-x86_64.jar/org/nd4j/nativeblas/macosx-x86_64/libjnind4jcpu.dylib
>     Loading library libnd4jcpu
>     Failed to load for libnd4jcpu: java.lang.UnsatisfiedLinkError: no libnd4jcpu in java.library.path
>     Loading class org.bytedeco.javacpp.openblas
>     Loading class org.bytedeco.javacpp.openblas
>     Loading library iomp5
>     Failed to load for iomp5: java.lang.UnsatisfiedLinkError: no iomp5 in java.library.path
>     Loading library mkl_core
>     Failed to load for mkl_core: java.lang.UnsatisfiedLinkError: no mkl_core in java.library.path
>     Loading library mkl_avx
>     Failed to load for mkl_avx: java.lang.UnsatisfiedLinkError: no mkl_avx in java.library.path
>     Loading library mkl_avx2
>     Failed to load for mkl_avx2: java.lang.UnsatisfiedLinkError: no mkl_avx2 in java.library.path ....

我可以看到 libnd4jcpu 确实存在,所以我不确定是什么问题。

计算机:Macbook 2015:无 GPU

更新我从https://github.com/deeplearning4j/dl4j-examples/blob/master/dl4j-examples/src/main/java/org/deeplearning4j/examples/feedforward/classification/MLPClassifierLinear.java运行示例 MDPClassifer 代码和使用了他们拥有的 pom.xml 文件。我有同样的问题

4

0 回答 0