Torch

Torch היא ספריית קוד פתוח ללמידה חישובית, תשתית לחישוב מדעי, ושפת תסריט המבוססת על שפת התכנות לואה. הספרייה מספקת מגוון רחב של אלגוריתמים ללמידה עמוקה, ומשתמשת בשפת התסריט LuaJIT במימוש אחורי בשפת C. פיתוח הספרייה הופסק ב-2018, אך עם זאת, ספריית PyTorch המתבססת עליה המשיכה בפיתוח פעיל.

torch 
החבילה הבסיסית ב-Torch היא torch. החבילה מספקת ממשק עבודה נוח עם מערכים N ממדים או טנזורים ובפרט אינדוקס, חיתוך, שחלוף, הסבת טיפוסים, שינוי גודל, שיתוף אחסון ושכפול. אובייקט זה נמצא בשימוש נרחב בחבילות שונות ומהווה את האובייקט הבסיסי בספרייה. הטנזור תומך גם בפעולות מתמטיות כמו מקסימום, מינימום, סכימה, התפלגויות סטטיסטיות, ופעולות סטנדרטיות מתמטיות סטנדרטיות של BLAS.

להלן דוגמה לשימוש ב-Torch דרך מפרש אינטראקטיבי:
> a = torch.randn(3,4)

> =a
-0.2381 -0.3401 -1.7844 -0.2615
 0.1411 1.6249 0.1708 0.8299
-1.0434 2.2291 1.0525 0.8465
[torch.DoubleTensor of dimension 3x4]

> a[1][2]
-0.34010116549482
	
> a:narrow(1,1,2)
-0.2381 -0.3401 -1.7844 -0.2615
 0.1411 1.6249 0.1708 0.8299
[torch.DoubleTensor of dimension 2x4]

> a:index(1, torch.LongTensor{1,2})
-0.2381 -0.3401 -1.7844 -0.2615
 0.1411 1.6249 0.1708 0.8299
[torch.DoubleTensor of dimension 2x4]

> a:min()
-1.7844365427828	ספריית torch מאפשרת גם תכנות מונחה-עצמים וסריאליזציה באמצעות פונקציות שימושיות. פונקציית torch.class(classname, parentclass)יכולה לשמש כדי ליצור יצרני אובייקטים. כאשר הבנאי נקרא, torch מתאחל ומגדיר טבלת לואה עם metatable המוגדרת על ידי המשתמש ובכך הופך את הטבלה לאובייקט.

nn 
חבילת nn משמשת לבניית רשתות עצביות מלאכותית. היא מחולקת לאובייקטים מודולריים המשתפים ממשק משותף Module, הכולל פונקציות forward ו־backward המבצעים היזון קדמי (feedforward) ופעפוע אחורנית (backpropagate) בהתאמה. את המרכיבים הבסיסים ברשת כמו שכבות אקטיבציה ניתן ליצור מ-Linear, Tanh ו־Max. ניתן להרכיב מודלים מורכבים Sequential, Parallel ו־Concat. המבנה המודולרי מאפשר גזירה אוטומטית מסדר ראשון.

דוגמה להגדרת פרספטרון רב שכבתי:
> mlp = nn.Sequential()
> mlp:add( nn.Linear(10, 25) ) -- 10 input, 25 hidden units
> mlp:add( nn.Tanh() ) -- some hyperbolic tangent transfer function
> mlp:add( nn.Linear(25, 1) ) -- 1 output
> =mlp:forward(torch.randn(10))
-0.1815
[torch.Tensor of dimension 1]
פונקציות הפסד (Loss) ממומשות באמצעות תת-מחלקות של Criterion, שלו ממשק דומה לשל Module. פונקציות הפסד נפוצות הן שורש ממוצע הריבועים של השגיאה הממומש באמצעות MSECriterion ואנטרופיה משותפת הממומשת באמצעות ClassNLLCriterion.

בספרייה קיימת גם מחלקה StochasticGradient המשמשת לאימון הרשת באמצעות גרדינט סטוכסטי (SGD).

קישורים חיצוניים 
 
 קוד הספרייה ב-github

למידת מכונה