Deeplearning4j: למידה עמוקה ו- ETL עבור ה- JVM

Eclipse Deeplearning4j היא ספריית למידה עמוקה מבוזרת עם קוד פתוח ומופץ עבור ה- JVM. Deeplearning4j כתוב בג'אווה ותואם לכל שפת JVM, כמו Scala, Clojure או Kotlin. החישובים הבסיסיים כתובים ב- C, C ++ ו- Cuda. Keras ישמש כ- API של פייתון. משולב עם Hadoop ו- Apache Spark, Deeplearning4j מביא AI לסביבות עסקיות לשימוש ב- GPUs ובמעבדים מבוזרים.

Deeplearning4j הוא למעשה ערימה של פרויקטים שנועדו לתמוך בכל הצרכים של יישום למידה עמוקה מבוססת JVM. מעבר ל- Deeplearning4j עצמו (ה- API ברמה הגבוהה), הוא כולל ND4J (אלגברה לינארית למטרות כלליות), SameDiff (בידול אוטומטי מבוסס גרף), DataVec (ETL), Arbiter (חיפוש היפרפרמטר) ו- C ++ LibND4J (עומד בבסיס הכל הנ"ל). LibND4J בתורו קורא לספריות סטנדרטיות לתמיכה ב- CPU ו- GPU, כמו OpenBLAS, OneDNN (MKL-DNN), cuDNN ו- cuBLAS.

המטרה של Eclipse Deeplearning4j היא לספק מערכת ליבה של רכיבים לבניית יישומים המשלבים AI. למוצרי AI בארגון יש לרוב היקף רחב יותר מאשר רק למידת מכונה. המטרה הכוללת של ההפצה היא לספק ברירות מחדל חכמות לבניית יישומי למידה עמוקה.

Deeplearning4j מתחרה, ברמה מסוימת, בכל מסגרת למידה עמוקה אחרת. הפרויקט השווה ביותר בהיקפו הוא TensorFlow, המהווה את מסגרת הלמידה העמוקה המובילה מקצה לקצה לייצור. ל- TensorFlow יש כיום ממשקים עבור Python, C ++ ו- Java (ניסיוני), ויישום נפרד ל- JavaScript. TensorFlow משתמש בשתי דרכי אימון: מצב מבוסס גרף ומיידי (ביצוע להוט). Deeplearning4j תומך כרגע רק בביצוע מבוסס גרף.

PyTorch, ככל הנראה המסגרת המובילה למידה עמוקה למחקר, תומכת רק במצב מיידי; יש לו ממשקים עבור Python, C ++ ו- Java. H2O Sparkling Water משלב את פלטפורמת הלמידה הממוחשבת בזיכרון עם קוד פתוח, מופץ בזכרון עם Spark. ל- H2O יש ממשקים למחשבי Java ו- Scala, Python, R ו- H2O Flow.

ניתן לרכוש תמיכה מסחרית עבור Deeplearning4j מ- Konduit, שתומך גם ברבים מהיזמים העובדים על הפרויקט.

איך עובד Deeplearning4j

Deeplearning4j מתייחס למשימות טעינת נתונים ואלגוריתמי הכשרה כתהליכים נפרדים. אתה טוען ומשתנה את הנתונים באמצעות ספריית DataVec, ומאמן מודלים באמצעות טנסורים וספריית ND4J.

אתה בולע נתונים דרך RecordReaderממשק ועובר על הנתונים באמצעות a RecordReaderDataSetIterator. אתה יכול לבחור DataNormalizationכיתה שתשתמש בה כמעבד מראש עבור שלך DataSetIterator. השתמש ImagePreProcessingScalerבנתוני התמונה, NormalizerMinMaxScalerאם יש לך טווח אחיד לאורך כל הממדים של נתוני הקלט שלך, NormalizerStandardizeוברוב המקרים האחרים. במידת הצורך תוכלו ליישם DataNormalizationמחלקה מותאמת אישית .

DataSetאובייקטים הם מכולות עבור התכונות והתוויות של הנתונים שלך, ושמור את הערכים בכמה מקרים של INDArray: אחד עבור התכונות של הדוגמאות שלך, אחד עבור התוויות, ושני ערכים נוספים להסוואה, אם אתה משתמש בנתוני סדרות זמן. במקרה של התכונות, INDArrayהוא טנזור מהגודל Number of Examples x Number of Features. בדרך כלל תחלק את הנתונים למיני קבוצות לאימון; מספר הדוגמאות ב- INDArrayקטן מספיק כדי להתאים לזיכרון אך גדול מספיק כדי לקבל שיפוע טוב.

אם תסתכל על קוד Deeplearning4j להגדרת מודלים, כמו דוגמת Java למטה, תראה שזה ממשק API ברמה גבוהה מאוד, בדומה לקרס. למעשה, ממשק הפיתון המתוכנן ל- Deeplearning4j ישתמש בקרס; כרגע, אם יש לך דגם Keras, אתה יכול לייבא אותו ל- Deeplearning4j.

MultiLayerConfiguration conf =

    NeuralNetConfiguration.Builder חדש ()

        .optimizationAlgo (OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)

        .updater (Nesterovs חדש (learningRate, 0.9))

        .רשימה(

            חדש DenseLayer.Builder (). nIn (numInputs) .nOut (numHiddenNodes). activation ("relu"). build (),

            OutputLayer.Builder חדש (LossFunction.NEGATIVELOGLIKELIHOOD).

                  הפעלה ("softmax"). nIn (numHiddenNodes) .nOut (numOutputs) .build ()

        ). backprop (נכון) .build ();

MultiLayerNetworkבכיתה הוא ה- API תצורת הרשת הפשוט ביותר שקיים ב Eclipse Deeplearning4j; עבור מבני DAG, השתמש ComputationGraphבמקום זאת. שים לב שאלגוריתם האופטימיזציה (SGD בדוגמה זו) מוגדר בנפרד מהעדכון (Nesterov בדוגמה זו). רשת עצבית פשוטה מאוד זו כוללת שכבה צפופה אחת עם ReLUפונקציית הפעלה ושכבת פלט אחת עם -log(likelihood)אובדן softmaxופונקציית הפעלה, והיא נפתרת על ידי התפשטות גב. עוד רשתות מורכבות ייתכן גם שיהיה GravesLSTM, ConvolutionLayer, EmbeddingLayer, ואחרים מסוגי שכבת שני נתמך עשרות סוגים שכבת שטח שש עשרה.

הדרך הפשוטה ביותר להכשיר את המודל היא לקרוא .fit()לשיטה בתצורת המודל עם שלך DataSetIteratorכארגומנט. אתה יכול גם לאפס את האיטרטור ולקרוא .fit()לשיטה לתקופות רבות ככל שתצטרך, או להשתמש ב- EarlyStoppingTrainer.

לבדיקת ביצועי המודל, השתמש Evaluationבכיתה כדי לראות עד כמה המודל המאומן מתאים לנתוני המבחן שלך, שאינם אמורים להיות זהים לנתוני האימון.

Deeplearning4j מספק מתקן מאזין שיעזור לך לעקוב אחר ביצועי הרשת שלך באופן חזותי, שייקרא לאחר עיבוד כל מיני אצווה. אחד המאזינים הנפוצים ביותר הוא ScoreIterationListener.

התקנה ובדיקה של Deeplearning4j

כרגע, הדרך הקלה ביותר לנסות את Deeplearning4j היא באמצעות ההתחלה המהירה הרשמית. זה דורש גרסה עדכנית יחסית של Java, התקנה של Maven, Git עובד, והעתק של IntelliJ IDEA (מועדף) או Eclipse. יש גם כמה התחלות מהירות שתרמו המשתמשים. התחל על ידי שיבוט ריפו eclipse / deeplearning4j-דוגמאות למכונה שלך באמצעות Git או GitHub Desktop. לאחר מכן התקן את הפרויקטים עם Maven מהתיקייה dl4j-examples.

martinheller @ Martins-Retina-MacBook dl4j-examples% mvn התקנה נקייה

[ INFO ] סורק אחר פרויקטים ...

[ אזהרה ]

[ אזהרה ] נתקלנו בבעיות מסוימות בעת בניית המודל היעיל עבור org.deeplearning4j: dl4j-examples: jar: 1.0.0-beta7

[ אזהרה ] 'build.plugins.plugin. (GroupId: artifactId)' חייב להיות ייחודי אך נמצא הצהרה כפולה של תוסף org.apache.maven.plugins: maven-compiler-plugin @ שורה 250, עמודה 21

[ אזהרה ]

[ אזהרה ] מומלץ מאוד לפתור בעיות אלה מכיוון שהן מאיימות על יציבות המבנה שלך.

[ אזהרה ]

[ אזהרה ] מסיבה זו, ייתכן שגרסאות Maven עתידיות כבר לא יתמכו בבניית פרויקטים כאלו שגויים.

[ אזהרה ]

[ מידע ]

[ INFO ] ------------------ < org.deeplearning4j: dl4j-דוגמאות > ------------------

[ INFO ] מבוא מבנה ל- DL4J 1.0.0-beta7

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

הורד ממרכז: //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 ב -4.4 kB / s)

הורדה ממרכז: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom

הורד ממרכז: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom (11 kB ב 137 kB / s)

הורדה ממרכז: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.jar

הורד ממרכז: //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)

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.