首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Intellij Maven deeplearning4j

Intellij Maven deeplearning4j
EN

Stack Overflow用户
提问于 2020-01-15 04:33:31
回答 2查看 475关注 0票数 0

我正试图在IntelliJ中设置一个maven项目,我需要完成关于如何为deeplearning4j进行设置的最新说明,因为我经常遇到以下错误:

java.lang.NoClassDefFoundError:无法初始化类org.nd4j.linalg.factory.Nd4j和java.lang.ExceptionInInitializerError (这是当我使用Kotlin时)。当我正常运行程序时,我也会收到这些警告:log4j:警告没有为记录器(org.nd4j.linalg.factory.Nd4jBackend)找到任何附加程序。

这是我的pom.xml文件:

代码语言:javascript
复制
<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>org.example</groupId>
<artifactId>Test</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>org.example Test</name>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <kotlin.version>1.3.61</kotlin.version>
    <kotlin.code.style>official</kotlin.code.style>
    <junit.version>4.12</junit.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-stdlib</artifactId>
        <version>${kotlin.version}</version>
    </dependency>
    <dependency>
        <groupId>org.nd4j</groupId>
        <artifactId>nd4j-common</artifactId>
        <version>1.0.0-beta6</version>
    </dependency>
        <dependency>
            <groupId>org.deeplearning4j</groupId>
            <artifactId>deeplearning4j-core</artifactId>
            <version>1.0.0-beta4</version>
        </dependency>
        <dependency>
            <groupId>org.nd4j</groupId>
            <artifactId>nd4j-native-platform</artifactId>
            <version>1.0.0-beta4</version>
        </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.5</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.5</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.5</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.5</version>
    </dependency>
    <dependency>
        <groupId>org.nd4j</groupId>
        <artifactId>nd4j-jblas</artifactId>
        <version>0.0.3.5.5.4-SNAPSHOT</version>
    </dependency>
</dependencies>

<build>
    <sourceDirectory>src/main/kotlin</sourceDirectory>
    <testSourceDirectory>src/test/kotlin</testSourceDirectory>

    <plugins>
        <plugin>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-maven-plugin</artifactId>
            <version>${kotlin.version}</version>
            <executions>
                <execution>
                    <id>compile</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                </execution>
                <execution>
                    <id>test-compile</id>
                    <phase>test-compile</phase>
                    <goals>
                        <goal>addSources</goal>
                        <goal>test-compile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

这是我的程序(取自nd4j示例):

代码语言:javascript
复制
import org.nd4j.linalg.api.ndarray.INDArray
import org.nd4j.linalg.factory.Nd4j
import java.util.*

class Test3
{

}

fun main() { /*
        Before we begin, let's review what an INDArray is:
        A INDArray is a multi-dimensional array of numbers: a vector, matrix, or tensor for example.
        Internally, it may store single precision or double precision floating point values for each entry.
        Here, we'll see how you can get some basic information about INDArrays. In later examples, we'll see
        the different ways to create INDArrays, and more operations we can do on them.
         */
//Let's start by creating a basic 2d array: a matrix with 3 rows and 5 columns. All elements are 0.0
    val nRows = 3
    val nColumns = 5
    val myArray: INDArray = Nd4j.zeros(nRows, nColumns)
    //Next, print some basic information about the array:
    System.out.println("Basic INDArray information:")
    System.out.println("Num. Rows:          " + myArray.rows())
    System.out.println("Num. Columns:       " + myArray.columns())
    System.out.println("Num. Dimensions:    " + myArray.rank()) //2 dimensions -> rank 2
    System.out.println("Shape:              " + Arrays.toString(myArray.shape())) //[3,5] -> 3 rows, 5 columns
    System.out.println("Length:             " + myArray.length()) // 3 rows * 5 columns = 15 total elements
    //We can print the array itself using toString method:
    System.out.println("\nArray Contents:\n$myArray")
    //There are some other ways we can get the same or similar info
    System.out.println()
    System.out.println("size(0) == nRows:   " + myArray.size(0)) //Also equivalent to: .shape()[0]
    System.out.println("size(1) == nCols:   " + myArray.size(1)) //Also equivalent to: .shape()[1]
    System.out.println("Is a vector:        " + myArray.isVector())
    System.out.println("Is a scalar:        " + myArray.isScalar())
    System.out.println("Is a matrix:        " + myArray.isMatrix())
    System.out.println("Is a square matrix: " + myArray.isSquare())
    //Let's make some modifications to our array...
// Note that indexing starts at 0. Thus 0..2 are valid indices for rows, and 0..4 are valid indices for columns here
    myArray.putScalar(0, 1, 2.0) //Set value at row 0, column 1 to value 2.0
    myArray.putScalar(2, 3, 5.0) //Set value at row 2, column 3 to value 5.0
    System.out.println("\nArray after putScalar operations:")
    System.out.println(myArray)
    //We can also get individual values:
    val val0: Double = myArray.getDouble(0, 1) //Get the value at row 0, column 1 - expect value 2.0 as we set this earlier
    System.out.println("\nValue at (0,1):     $val0")
    //Finally, there are many things we can do to the array... for example adding scalars:
    val myArray2: INDArray = myArray.add(1.0) //Add 1.0 to each entry
    System.out.println("\nNew INDArray, after adding 1.0 to each entry:")
    System.out.println(myArray2)
    val myArray3: INDArray = myArray2.mul(2.0) //Multiply each entry by 2.0
    System.out.println("\nNew INDArray, after multiplying each entry by 2.0:")
    System.out.println(myArray3)
}
EN

回答 2

Stack Overflow用户

发布于 2020-01-15 11:34:08

哇,那个pom.xml似乎已经坏了。你从哪弄来的?

通常,您希望所有DL4J和ND4J依赖项都具有相同的版本,但您需要在这里进行混合。然后,您将多次获得slf4j-api依赖项和一个古老版本的jblas (多年来一直不需要的依赖项)。

看看https://github.com/eclipse/deeplearning4j-examples/blob/master/standalone-sample-project/pom.xml

这个示例pom.xml通常是最新的,是一个很好的起点。

票数 0
EN

Stack Overflow用户

发布于 2020-04-26 18:46:01

这里给出了完整的安装指南:http://nd4j.org/getstarted

注意:只支持64位jdk,不支持jdk 13,jdk 7对我很好,在intellij中启用自动导入模块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59745189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档