Deeplearning4j: aprendizaje profundo y ETL para la JVM

Eclipse Deeplearning4j es una biblioteca de aprendizaje profundo, distribuida y de código abierto para la JVM. Deeplearning4j está escrito en Java y es compatible con cualquier lenguaje JVM, como Scala, Clojure o Kotlin. Los cálculos subyacentes están escritos en C, C ++ y Cuda. Keras servirá como la API de Python. Integrado con Hadoop y Apache Spark, Deeplearning4j lleva la IA a los entornos empresariales para su uso en GPU y CPU distribuidas.

Deeplearning4j es en realidad una pila de proyectos destinados a satisfacer todas las necesidades de una aplicación de aprendizaje profundo basada en JVM. Más allá de Deeplearning4j en sí (la API de alto nivel), incluye ND4J (álgebra lineal de propósito general), SameDiff (diferenciación automática basada en gráficos), DataVec (ETL), Arbiter (búsqueda de hiperparámetros) y C ++ LibND4J (sustenta todo de los anteriores). LibND4J a su vez llama a bibliotecas estándar para soporte de CPU y GPU, como OpenBLAS, OneDNN (MKL-DNN), cuDNN y cuBLAS.

El objetivo de Eclipse Deeplearning4j es proporcionar un conjunto básico de componentes para crear aplicaciones que incorporen IA. Los productos de IA dentro de una empresa a menudo tienen un alcance más amplio que el aprendizaje automático. El objetivo general de la distribución es proporcionar valores predeterminados inteligentes para la creación de aplicaciones de aprendizaje profundo.

Deeplearning4j compite, en algún nivel, con cualquier otro marco de aprendizaje profundo. El proyecto más comparable en alcance es TensorFlow, que es el marco líder de aprendizaje profundo de extremo a extremo para la producción. TensorFlow actualmente tiene interfaces para Python, C ++ y Java (experimental), y una implementación separada para JavaScript. TensorFlow usa dos formas de entrenamiento: modo basado en gráficos e inmediato (ejecución ansiosa). Deeplearning4j actualmente solo admite la ejecución basada en gráficos.

PyTorch, probablemente el marco líder de aprendizaje profundo para la investigación, solo admite el modo inmediato; tiene interfaces para Python, C ++ y Java. H2O Sparkling Water integra la plataforma de aprendizaje automático en memoria distribuida de código abierto H2O con Spark. H2O tiene interfaces para portátiles Java y Scala, Python, R y H2O Flow.

Se puede adquirir soporte comercial para Deeplearning4j en Konduit, que también es compatible con muchos de los desarrolladores que trabajan en el proyecto.

Cómo funciona Deeplearning4j

Deeplearning4j trata las tareas de carga de datos y algoritmos de entrenamiento como procesos separados. Carga y transforma los datos usando la biblioteca DataVec y entrena modelos usando tensores y la biblioteca ND4J.

Usted ingiere datos a través de una RecordReaderinterfaz y recorre los datos utilizando un RecordReaderDataSetIterator. Puede elegir una DataNormalizationclase para usar como preprocesador para su DataSetIterator. Utilice ImagePreProcessingScalerpara datos de imagen, NormalizerMinMaxScalersi tiene un rango uniforme en todas las dimensiones de sus datos de entrada y NormalizerStandardizepara la mayoría de los otros casos. Si es necesario, puede implementar una DataNormalizationclase personalizada .

DataSetLos objetos son contenedores para las características y etiquetas de sus datos y mantienen los valores en varias instancias de INDArray: una para las características de sus ejemplos, una para las etiquetas y dos adicionales para enmascaramiento, si está utilizando datos de series de tiempo. En el caso de las características, el INDArrayes un tensor del tamaño Number of Examples x Number of Features. Normalmente, dividirá los datos en mini lotes para el entrenamiento; el número de ejemplos en un INDArrayes lo suficientemente pequeño como para caber en la memoria, pero lo suficientemente grande como para obtener un buen gradiente.

Si observa el código Deeplearning4j para definir modelos, como el ejemplo de Java a continuación, verá que es una API de muy alto nivel, similar a Keras. De hecho, la interfaz de Python planificada para Deeplearning4j utilizará Keras; ahora mismo, si tiene un modelo de Keras, puede importarlo a Deeplearning4j.

MultiLayerConfiguration conf =

    nuevo NeuralNetConfiguration.Builder ()

        .optimizationAlgo (OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)

        .updater (nuevo Nesterovs (learningRate, 0.9))

        .lista(

            new DenseLayer.Builder (). nIn (numInputs) .nOut (numHiddenNodes) .activation ("relu"). build (),

            new OutputLayer.Builder (LossFunction.NEGATIVELOGLIKELIHOOD).

                  activación ("softmax"). nIn (numHiddenNodes) .nOut (numOutputs) .build ()

        ) .backprop (verdadero) .build ();

La MultiLayerNetworkclase es la API de configuración de red más simple disponible en Eclipse Deeplearning4j; para estructuras DAG, utilice en su ComputationGraphlugar. Tenga en cuenta que el algoritmo de optimización (SGD en este ejemplo) se especifica por separado del actualizador (Nesterov en este ejemplo). Esta red neuronal muy simple tiene una capa densa con una ReLUfunción de activación y una capa de salida con -log(likelihood)pérdida y una softmaxfunción de activación, y se resuelve mediante retropropagación. Más redes complejas también pueden tener GravesLSTM, ConvolutionLayer, EmbeddingLayer, y otros de los dos tipos de capas docena apoyado y dieciséis tipos de espacios capa.

La forma más sencilla de entrenar el modelo es llamar al .fit()método en la configuración del modelo con su DataSetIteratorcomo argumento. También puede restablecer el iterador y llamar al .fit()método para tantas épocas como necesite, o usar un EarlyStoppingTrainer.

Para probar el rendimiento del modelo, use una Evaluationclase para ver qué tan bien se ajusta el modelo entrenado a sus datos de prueba, que no deberían ser los mismos que los datos de entrenamiento.

Deeplearning4j proporciona una función de escucha que lo ayuda a monitorear visualmente el rendimiento de su red, que se llamará después de que se procese cada mini lote. Uno de los oyentes más utilizados es ScoreIterationListener.

Instalación y prueba de Deeplearning4j

Por el momento, la forma más fácil de probar Deeplearning4j es utilizando el inicio rápido oficial. Requiere una versión relativamente reciente de Java, una instalación de Maven, un Git funcional y una copia de IntelliJ IDEA (preferido) o Eclipse. También hay algunos inicios rápidos aportados por los usuarios. Comience clonando el repositorio de eclipse / deeplearning4j-examples en su propia máquina con Git o GitHub Desktop. Luego instale los proyectos con Maven desde la carpeta dl4j-examples.

martinheller @ Martins-Retina-MacBook dl4j-examples% mvn instalación limpia

[ INFO ] Escaneado de proyectos ...

[ ADVERTENCIA ]

[ ADVERTENCIA ] Se encontraron algunos problemas al crear el modelo efectivo para org.deeplearning4j: dl4j-examples: jar: 1.0.0-beta7

[ ADVERTENCIA ] 'build.plugins.plugin. (GroupId: artifactId)' debe ser único, pero se encontró una declaración duplicada del complemento org.apache.maven.plugins: maven-compiler-plugin @ línea 250, columna 21

[ ADVERTENCIA ]

[ ADVERTENCIA ] Se recomienda encarecidamente solucionar estos problemas porque amenazan la estabilidad de su construcción.

[ ADVERTENCIA ]

[ ADVERTENCIA ] Por esta razón, es posible que las versiones futuras de Maven ya no admitan la creación de proyectos con formato incorrecto.

[ ADVERTENCIA ]

[ INFO ]

[ INFO ] ------------------ < org.deeplearning4j: dl4j-examples > ------------------

[ INFO ] Introducción a la construcción de DL4J 1.0.0-beta7

[INFO] --------------------------------[ jar ]---------------------------------

Downloaded from central: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.pom (6.5 kB at 4.4 kB/s)

Downloading from central: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom

Downloaded from central: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom (11 kB at 137 kB/s)

Downloading from central: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.jar

Downloaded from central: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.jar (22 kB at 396 kB/s)

Downloading from central: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.pom

Downloaded from central: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.pom (12 kB at 283 kB/s)

Downloading from central: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.jar

Downloaded from central: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.jar (46 kB at 924 kB/s)

Downloading from central: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.pom

Downloaded from central: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.pom (19 kB at 430 kB/s)

Downloading from central: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.jar

Downloaded from central: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.jar (106 kB at 1.6 MB/s)

Downloading from central: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/3.5.1/maven-compiler-plugin-3.5.1.pom

[WARNING]   - org.agrona.collections.Hashing

[WARNING]   - org.agrona.collections.Long2ObjectCache$ValueIterator

[WARNING]   - org.agrona.collections.Int2ObjectHashMap$EntrySet

[WARNING]   - org.agrona.concurrent.SleepingIdleStrategy

[WARNING]   - org.agrona.collections.MutableInteger

[WARNING]   - org.agrona.collections.Int2IntHashMap

[WARNING]   - org.agrona.collections.IntIntConsumer

[WARNING]   - org.agrona.concurrent.status.StatusIndicator

[WARNING]   - 175 more...

[WARNING] javafx-base-14-mac.jar, javafx-graphics-14-mac.jar, jakarta.xml.bind-api-2.3.2.jar define 1 overlapping classes:

[WARNING]   - module-info

[WARNING] protobuf-1.0.0-beta7.jar, guava-19.0.jar define 3 overlapping classes:

[WARNING]   - com.google.thirdparty.publicsuffix.TrieParser

[WARNING]   - com.google.thirdparty.publicsuffix.PublicSuffixPatterns

[WARNING]   - com.google.thirdparty.publicsuffix.PublicSuffixType

[WARNING] jsr305-3.0.2.jar, guava-1.0.0-beta7.jar define 35 overlapping classes:

[WARNING]   - javax.annotation.RegEx

[WARNING]   - javax.annotation.concurrent.Immutable

[WARNING]   - javax.annotation.meta.TypeQualifierDefault

[WARNING]   - javax.annotation.meta.TypeQualifier

[WARNING]   - javax.annotation.Syntax

[WARNING]   - javax.annotation.CheckReturnValue

[WARNING]   - javax.annotation.CheckForNull

[WARNING]   - javax.annotation.Nonnull

[WARNING]   - javax.annotation.meta.TypeQualifierNickname

[WARNING]   - javax.annotation.MatchesPattern

[WARNING]   - 25 more...

[WARNING] maven-shade-plugin has detected that some class files are

[WARNING] present in two or more JARs. When this happens, only one

[WARNING] single version of the class is copied to the uber jar.

[WARNING] Usually this is not harmful and you can skip these warnings,

[WARNING] otherwise try to manually exclude artifacts based on

[WARNING] mvn dependency:tree -Ddetail=true and the above output.

[WARNING] See //maven.apache.org/plugins/maven-shade-plugin/

[INFO] Attaching shaded artifact.

[INFO]

[INFO] --- maven-install-plugin:2.4:install (default-install) @ dl4j-examples ---

[INFO] Installing /Volumes/Data/repos/deeplearning4j-examples/dl4j-examples/target/dl4j-examples-1.0.0-beta7.jar to /Users/martinheller/.m2/repository/org/deeplearning4j/dl4j-examples/1.0.0-beta7/dl4j-examples-1.0.0-beta7.jar

[INFO] Installing /Volumes/Data/repos/deeplearning4j-examples/dl4j-examples/pom.xml to /Users/martinheller/.m2/repository/org/deeplearning4j/dl4j-examples/1.0.0-beta7/dl4j-examples-1.0.0-beta7.pom

[INFO] Installing /Volumes/Data/repos/deeplearning4j-examples/dl4j-examples/target/dl4j-examples-1.0.0-beta7-shaded.jar to /Users/martinheller/.m2/repository/org/deeplearning4j/dl4j-examples/1.0.0-beta7/dl4j-examples-1.0.0-beta7-shaded.jar

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time:  05:07 min

[INFO] Finished at: 2020-07-10T10:58:55-04:00

[INFO] ------------------------------------------------------------------------

[email protected] dl4j-examples %

Once the installation is complete, open the dl4j-examples/ directory with IntelliJ IDEA and try running some of the examples.