Programavimas

„Deeplearning4j“: gilus mokymasis ir ETL JVM

„Eclipse Deeplearning4j“ yra atviro šaltinio platinama išsami mokymosi biblioteka, skirta JVM. „Deeplearning4j“ yra parašytas „Java“ ir yra suderinamas su bet kuria JVM kalba, pvz., „Scala“, „Clojure“ ar „Kotlin“. Pagrindiniai skaičiavimai parašyti C, C ++ ir Cuda. „Keras“ bus naudojama kaip „Python“ API. Integruotas su „Hadoop“ ir „Apache Spark“, „Deeplearning4j“ atneša dirbtinį intelektą verslo aplinkai, skirtą naudoti paskirstytuose GPU ir procesoriuose.

„Deeplearning4j“ iš tikrųjų yra daugybė projektų, skirtų patenkinti visus JVM pagrįstos gilaus mokymosi programos poreikius. Be paties „Deeplearning4j“ (aukšto lygio API), jis apima ND4J (bendrosios paskirties linijinė algebra,), „SameDiff“ (automatinė diagrama pagal diferenciaciją), „DataVec“ (ETL), „Arbiter“ (hiperparametrų paieška) ir „C ++ LibND4J“ (visa tai palaiko). aukščiau išvardytų). „LibND4J“ pakaitomis reikalauja standartinių bibliotekų, skirtų palaikyti procesorius ir GPU, pvz., „OpenBLAS“, „OneDNN“ (MKL-DNN), „cuDNN“ ir „cuBLAS“.

„Eclipse Deeplearning4j“ tikslas yra pateikti pagrindinį statybinių komponentų rinkinį programos kurie apima AI. Dirbtinio intelekto produktai įmonėje dažnai yra platesnio masto nei vien mašininis mokymasis. Bendras platinimo tikslas yra pateikti protingus numatytuosius nustatymus giliųjų mokymosi programų kūrimui.

„Deeplearning4j“ tam tikru lygiu konkuruoja su visais kitais giluminio mokymosi pagrindais. Panašiausias pagal apimtį projektas yra „TensorFlow“, kuris yra pirmaujanti „giluminio mokymosi“ sistema. Šiuo metu „TensorFlow“ turi sąsajas „Python“, „C ++“ ir „Java“ (eksperimentinė) ir atskirą „JavaScript“ diegimą. „TensorFlow“ naudoja du treniruočių būdus: grafikais pagrįstą ir tiesioginį režimą (noriai vykdomas). „Deeplearning4j“ šiuo metu palaiko tik grafikais pagrįstą vykdymą.

„PyTorch“, tikriausiai pirmaujanti giliųjų mokymosi tyrimų sistema, palaiko tik tiesioginį režimą; jis turi sąsajas „Python“, „C ++“ ir „Java“. H2O putojantis vanduo integruoja atvirojo kodo H2O paskirstytą atminties mašinų mokymosi platformą su „Spark“. „H2O“ turi sąsajas „Java“ ir „Scala“, „Python“, „R“ ir „H2O Flow“ bloknotams.

Komercinę „Deeplearning4j“ paramą galima įsigyti iš „Konduit“, kuri taip pat palaiko daugelį prie projekto dirbančių kūrėjų.

Kaip veikia „Deeplearning4j“

„Deeplearning4j“ duomenų įkėlimo ir mokymo algoritmų užduotis laiko atskirais procesais. Duomenis įkeliate ir transformuojate naudodami „DataVec“ biblioteką, o mokote modelius naudodami tenzorus ir ND4J biblioteką.

Duomenis perimate per „RecordReader“ sąsają ir eikite per duomenis naudodami a „RecordReaderDataSetIterator“. Galite pasirinkti a Duomenų normalizavimas klasės naudoti kaip jūsų išankstinį procesorių „DataSetIterator“. Naudoti „ImagePreProcessingScaler“ vaizdų duomenims - NormalizerMinMaxScaler - jei turite vienodą diapazoną iš visų įvesties duomenų matmenų ir Standartizatorius daugeliu kitų atvejų. Jei reikia, galite įgyvendinti pasirinktį Duomenų normalizavimas klasė.

Duomenų rinkinys objektai yra jūsų duomenų funkcijų ir etikečių talpyklos, o reikšmės saugomos keliais atvejais INDArray: vienas skirtas pavyzdžių funkcijoms, vienas - etiketėms ir du papildomi - maskavimui, jei naudojate laiko eilučių duomenis. Funkcijų atveju INDArray yra dydžio tenoras Pavyzdžių skaičius x funkcijų skaičius. Paprastai duomenis mokymui suskirstysite į mažas partijas; pavyzdžių skaičius INDArray yra pakankamai mažas, kad tilptų atmintyje, bet pakankamai didelis, kad gautų gerą nuolydį.

Jei pažvelgsite į „Deeplearning4j“ kodą apibrėžti modelius, pvz., Žemiau pateiktą „Java“ pavyzdį, pamatysite, kad tai labai aukšto lygio API, panaši į „Keras“. Tiesą sakant, planuojamoje „Python“ sąsajoje „Deeplearning4j“ bus naudojama „Keras“; dabar, jei turite „Keras“ modelį, galite jį importuoti į „Deeplearning4j“.

MultiLayerConfiguration conf =

nauja „NeuralNetConfiguration.Builder“ ()

.optimizationAlgo (OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)

.updater (naujieji Nesterovs (learningRate, 0.9))

.list (

naujas „DenseLayer.Builder“ (). nIn (numInputs) .nOut (numHiddenNodes) .activation („relu“). build (),

naujas „OutputLayer.Builder“ („LossFunction.NEGATIVELOGLIKELIHOOD“).

aktyvinimas („softmax“). nIn (numHiddenNodes) .nOut (numOutputs) .build ()

) .backprop (true) .build ();

Daugiasluoksnis tinklas klasė yra paprasčiausia tinklo konfigūracijos API, pasiekiama „Eclipse Deeplearning4j“; DAG konstrukcijoms naudokite Skaičiavimo grafikas vietoj to. Atkreipkite dėmesį, kad optimizavimo algoritmas (šiame pavyzdyje SGD) nurodomas atskirai nuo atnaujinimo priemonės (šiame pavyzdyje - Nesterovas). Šis labai paprastas nervų tinklas turi vieną tankų sluoksnį su a „ReLU“ aktyvinimo funkcija ir vienas išvesties sluoksnis su -log (tikimybė) nuostoliai ir a softmax aktyvinimo funkciją ir yra išspręsta sklindant atgal. Gali būti ir sudėtingesni tinklai KapaiLSTM, ConvolutionLayer, „EmbeddingLayer“ir kiti iš dviejų dešimčių palaikomų sluoksnių tipų ir šešiolikos sluoksnių erdvės tipų.

Paprasčiausias būdas mokyti modelį yra paskambinti .fit () metodas modelio konfigūracijoje su jūsų „DataSetIterator“ kaip argumentą. Taip pat galite iš naujo nustatyti iteratorių ir paskambinti .fit () metodas tiek epochų, kiek jums reikia, arba naudokite „EarlyStoppingTrainer“.

Norėdami patikrinti modelio veikimą, naudokite Įvertinimas klasę, kad pamatytumėte, kaip gerai apmokytas modelis atitinka jūsų testo duomenis, kurie neturėtų sutapti su mokymo duomenimis.

„Deeplearning4j“ suteikia klausytojo galimybę, padėsiančią vizualiai stebėti tinklo našumą, kuris bus iškviestas apdorojus kiekvieną mini paketą. Vienas dažniausiai naudojamų klausytojų yra „ScoreIterationListener“.

„Deeplearning4j“ diegimas ir testavimas

Šiuo metu lengviausias būdas išbandyti „Deeplearning4j“ yra oficialus greitasis pradžia. Tam reikalinga palyginti naujausia „Java“ versija, įdiegta „Maven“, veikianti „Git“ ir „IntelliJ IDEA“ (pageidaujama) arba „Eclipse“ kopija. Taip pat yra keletas naudotojų prisidėtų greitų paleidimų. Pradėkite klonuodami užtemimo / „deeplearning4j-pavyzdžių“ atsarginę kopiją savo kompiuteryje naudodami „Git“ arba „GitHub Desktop“. Tada įdiekite projektus naudodami „Maven“ iš aplanko dl4j-pavyzdžiai.

martinheller @ Martins-Retina-MacBook dl4j-pavyzdžiai% mvn švarus diegimas

[INFO] Ieškoma projektų ...

[ĮSPĖJIMAS]

[ĮSPĖJIMAS] Kuriant veiksmingą modelį org.deeplearning4j: dl4j-pavyzdžiai: jar: 1.0.0-beta7, kilo problemų

[ĮSPĖJIMAS] „build.plugins.plugin. (groupId: artifactId)“ turi būti unikalus, bet rastas papildinio deklaracijos dublikatas org.apache.maven.plugins: maven-compiler-plugin @ line 250, 21 stulpelis

[ĮSPĖJIMAS]

[ĮSPĖJIMAS] Labai rekomenduojama išspręsti šias problemas, nes jos kelia grėsmę jūsų konstrukcijos stabilumui.

[ĮSPĖJIMAS]

[ĮSPĖJIMAS] Dėl šios priežasties būsimos „Maven“ versijos gali nebepalaikyti tokių netinkamų projektų kūrimo.

[ĮSPĖJIMAS]

[INFO]

[INFO] ------------------< org.deeplearning4j: dl4j-pavyzdžiai >------------------

[INFO] Pastato „DL4J 1.0.0-beta7“ įvadas

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

Atsisiųsta iš centrinio: //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 esant 4,4) kB / s)

Atsisiunčiama iš centrinio: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom

Atsisiunčiama iš centro: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom (11 kB esant 137 kB / s)

Atsisiunčiama iš centrinio: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.jar

Atsisiųsta iš centro: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.jar (22 kB, 396 kB / s)

Atsisiunčiama iš centrinio: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.pom

Atsisiųsta iš centrinio: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.pom (12 kB, 283 kB / s)

Atsisiunčiama iš centrinio: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.jar

Atsisiųsta iš centrinio: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.jar (46 kB esant 924 kB / s)

Atsisiunčiama iš centrinio: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.pom

Atsisiųsta iš centrinio: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.111.pom (19 kB esant 430 kB / s)

Atsisiunčiama iš centrinio: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.jar

Atsisiųsta iš centrinio: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.jar (106 kB esant 1,6 MB / s)

Atsisiunčiama iš centrinio: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/3.5.1/maven-compiler-plugin-3.5.1.pom

[ĮSPĖJIMAS] - org.agrona.kolekcijos.Svyru

[ĮSPĖJIMAS] - org.agrona.collections.Long2ObjectCache $ ValueIterator

[ĮSPĖJIMAS] - org.agrona.collections.Int2ObjectHashMap $ EntrySet

[ĮSPĖJIMAS] - org.agrona.concurrent.SleepingIdleStrategy

[ĮSPĖJIMAS] - org.agrona.collections.MutableInteger

[ĮSPĖJIMAS] - org.agrona.collections.Int2IntHashMap

[ĮSPĖJIMAS] - org.agrona.collections.IntIntConsumer

[ĮSPĖJIMAS] - org.agrona.concurrent.status.StatusIndicator

[ĮSPĖJIMAS] - dar 175 ...

[ĮSPĖJIMAS] javafx-base-14-mac.jar, javafx-graphics-14-mac.jar, jakarta.xml.bind-api-2.3.2.jar apibrėžia 1 persidengiančias klases:

[ĮSPĖJIMAS] - modulis-info

[ĮSPĖJIMAS] protobuf-1.0.0-beta7.jar, guava-19.0.jar apibrėžia 3 persidengiančias klases:

[ĮSPĖJIMAS] - com.google.thirdparty.publicsuffix.TrieParser

[ĮSPĖJIMAS] - com.google.thirdparty.publicsuffix.PublicSuffixPatterns

[ĮSPĖJIMAS] - com.google.thirdparty.publicsuffix.PublicSuffixType

[ĮSPĖJIMAS] jsr305-3.0.2.jar, guava-1.0.0-beta7.jar apibrėžia 35 sutampančias klases:

[ĮSPĖJIMAS] - javax.nototation.RegEx

[ĮSPĖJIMAS] - javax.nototation.concurrent.Neįmanoma

[ĮSPĖJIMAS] - javax.annotation.meta.TypeQualifierDefault

[ĮSPĖJIMAS] - javax.annotation.meta.TypeQualifier

[ĮSPĖJIMAS] - javax.nototation.Sintaksė

[ĮSPĖJIMAS] - javax.annotation.CheckReturnValue

[ĮSPĖJIMAS] - javax.annotation.CheckForNull

[ĮSPĖJIMAS] - javax.nototation.Nonnull

[ĮSPĖJIMAS] - javax.annotation.meta.TypeQualifierNickname

[ĮSPĖJIMAS] - javax.annotation.MatchesPattern

[ĮSPĖJIMAS] - dar 25 ...

[ĮSPĖJIMAS] „maven-shadow-plugin“ nustatė, kad kai kurie klasės failai yra

[ĮSPĖJIMAS] yra dviejuose ar daugiau JAR. Kai tai atsitiks, tik vienas

[ĮSPĖJIMAS] viena klasės versija nukopijuojama į uber jar.

[ĮSPĖJIMAS] Paprastai tai nėra kenksminga ir galite praleisti šiuos įspėjimus,

[ĮSPĖJIMAS] kitaip bandykite rankiniu būdu pašalinti artefaktus pagal

[ĮSPĖJIMAS] mvn priklausomybė: medis -Detail = true ir aukščiau pateiktas rezultatas.

[ĮSPĖJIMAS] Žr. //Maven.apache.org/plugins/maven-shade-plugin/

[INFO] Tamsinto artefakto tvirtinimas.

[INFO]

[INFO] --- „maven-install-plugin“: 2.4: įdiegti (numatytasis diegimas) @ dl4j-pavyzdžiai ---

[INFO] Diegimas /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-pavyzdžiai-1.0.0-beta7.jar

[INFO] Diegiant /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] Diegimas /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- pavyzdžiai-1.0.0-beta7-shaded.jar

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

[INFO] STEBĖKITE SĖKM.

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

[INFO] Bendras laikas: 05:07 min

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

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

martinheller @ Martins-Retina-MacBook dl4j-pavyzdžiai%

Baigę diegti, atidarykite „dl4j-pavyzdžiai / katalogą“ naudodami „IntelliJ IDEA“ ir pabandykite paleisti keletą pavyzdžių.