Gorgonia เป็นห้องสมุดที่ช่วยอำนวยความสะดวกในการเรียนรู้ของเครื่อง เขียนและประเมินสมการทางคณิตศาสตร์ที่เกี่ยวข้องกับอาร์เรย์หลายมิติได้อย่างง่ายดาย ถ้าสิ่งนี้ฟังดูเหมือน Theano หรือ Tensorflow มันเป็นเพราะความคิดนั้นค่อนข้างคล้ายกัน โดยเฉพาะอย่างยิ่งห้องสมุดมีระดับต่ำเช่น Theano แต่มีเป้าหมายที่สูงกว่าเช่น TensorFlow
Gorgonia:
เป้าหมายหลักสำหรับ Gorgonia คือการเป็นไลบรารีการเรียนรู้ของเครื่อง/การคำนวณกราฟ ที่มีประสิทธิภาพสูง ซึ่งสามารถปรับขนาดได้หลายเครื่อง มันควรนำมาซึ่งการอุทธรณ์ของ GO (กระบวนการรวบรวมและปรับใช้อย่างง่าย) สู่โลก ML อย่างไรก็ตามเป็นทางยาวจากที่นั่นอย่างไรก็ตามขั้นตอนของทารกอยู่ที่นั่นแล้ว
เป้าหมายรองสำหรับ Gorgonia คือการจัดทำแพลตฟอร์มสำหรับการสำรวจสิ่งที่ไม่ได้มาตรฐานการเรียนรู้และเครือข่ายที่เกี่ยวข้องกับระบบประสาท ซึ่งรวมถึงสิ่งต่าง ๆ เช่นการเรียนรู้แบบ Neo-Hebbian อัลกอริทึมการตัดมุมอัลกอริทึมวิวัฒนาการและสิ่งที่คล้ายกัน
เหตุผลหลักในการใช้ Gorgonia คือความสะดวกสบายของนักพัฒนา หากคุณใช้ GO Stack อย่างกว้างขวางตอนนี้คุณสามารถเข้าถึงความสามารถในการสร้างระบบการเรียนรู้ของเครื่องที่พร้อมผลิตในสภาพแวดล้อมที่คุณคุ้นเคยและสะดวกสบายอยู่แล้ว
ML/AI ที่มีขนาดใหญ่มักจะแบ่งออกเป็นสองขั้นตอน: ขั้นตอนการทดลองที่หนึ่งสร้างแบบจำลองการทดสอบและการทดสอบซ้ำ และสถานะที่นำไปใช้งานซึ่งมีการทดสอบแบบจำลองและเล่นด้วย สิ่งนี้จำเป็นต้องมีบทบาทที่แตกต่างเช่นนักวิทยาศาสตร์ข้อมูลและวิศวกรข้อมูล
โดยทั่วไปแล้วสองเฟสมีเครื่องมือที่แตกต่างกัน: Python (Pytorch ฯลฯ ) มักใช้สำหรับขั้นตอนการทดลองและจากนั้นโมเดลจะถูกเขียนใหม่ในภาษาที่มีประสิทธิภาพมากกว่าเช่น C ++ (ใช้ DLIB, MLPACK ฯลฯ ) แน่นอนว่าทุกวันนี้ช่องว่างกำลังปิดตัวลงและผู้คนมักแบ่งปันเครื่องมือระหว่างพวกเขา TensorFlow เป็นเครื่องมือหนึ่งที่เชื่อมช่องว่าง
Gorgonia ตั้งเป้าหมายที่จะทำเช่นเดียวกัน แต่สำหรับสภาพแวดล้อม GO Gorgonia ปัจจุบันมีนักแสดงค่อนข้างมาก - ความเร็วของมันเปรียบได้กับการใช้งาน CPU ของ Pytorch และ Tensorflow การใช้งาน GPU นั้นค่อนข้างจู้จี้จุกจิกในการเปรียบเทียบเนื่องจากภาษี CGO หนัก แต่มั่นใจได้ว่านี่เป็นพื้นที่ของการปรับปรุงที่ใช้งานอยู่
แพ็คเกจนี้เป็นไปได้: go get -u gorgonia.org/gorgonia
Gorgonia เข้ากันได้กับโมดูล GO
เอกสารอ้างอิงที่ทันสมัยการอ้างอิงและบทช่วยสอนมีอยู่ในเว็บไซต์ Gorgonia อย่างเป็นทางการที่ https://gorgonia.org
โครงการของ Gorgonia มีช่อง Slack บน Gopherslack รวมถึงบัญชี Twitter การอัปเดตและการประกาศอย่างเป็นทางการจะถูกโพสต์ไปยังเว็บไซต์ทั้งสอง
Gorgonia ทำงานโดยการสร้างกราฟการคำนวณแล้วดำเนินการ คิดว่ามันเป็นภาษาการเขียนโปรแกรม แต่ จำกัด เฉพาะฟังก์ชั่นทางคณิตศาสตร์และไม่มีความสามารถในการแตกแขนง (ไม่มีถ้า/ลูป) ในความเป็นจริงนี่เป็นกระบวนทัศน์ที่โดดเด่นที่ผู้ใช้ควรใช้ในการคิด กราฟการคำนวณเป็น AST
CNTK ของ Microsoft ที่มีสมองอาจเป็นสิ่งที่ดีที่สุดในการเป็นตัวอย่างของแนวคิดที่ว่าการสร้างกราฟการคำนวณและการเรียกใช้กราฟการคำนวณเป็นสิ่งที่แตกต่างกันและผู้ใช้ควรอยู่ในโหมดความคิดที่แตกต่างกันเมื่อไปเกี่ยวกับพวกเขา
ในขณะที่การใช้งานของ Gorgonia ไม่ได้บังคับใช้การแยกความคิดเท่าที่สมองของ CNTK ไวยากรณ์จะช่วยได้เล็กน้อย
นี่คือตัวอย่าง - บอกว่าคุณต้องการกำหนดนิพจน์คณิตศาสตร์ z = x + y นี่คือวิธีที่คุณทำ:
package gorgonia_test
import (
"fmt"
"log"
. "gorgonia.org/gorgonia"
)
// Basic example of representing mathematical equations as graphs.
//
// In this example, we want to represent the following equation
// z = x + y
func Example_basic () {
g := NewGraph ()
var x , y , z * Node
var err error
// define the expression
x = NewScalar ( g , Float64 , WithName ( "x" ))
y = NewScalar ( g , Float64 , WithName ( "y" ))
if z , err = Add ( x , y ); err != nil {
log . Fatal ( err )
}
// create a VM to run the program on
machine := NewTapeMachine ( g )
defer machine . Close ()
// set initial values then run
Let ( x , 2.0 )
Let ( y , 2.5 )
if err = machine . RunAll (); err != nil {
log . Fatal ( err )
}
fmt . Printf ( "%v" , z . Value ())
// Output: 4.5
} คุณอาจทราบว่ามันมีความละเอียดมากกว่าแพ็คเกจอื่น ๆ ที่มีลักษณะคล้ายกันเล็กน้อย ตัวอย่างเช่นแทนที่จะรวบรวมฟังก์ชั่น callable Gorgonia รวบรวมเป็น *program ซึ่งต้องการ *TapeMachine เพื่อเรียกใช้ นอกจากนี้ยังต้องใช้การโทร Let(...) ด้วยตนเอง
ผู้เขียนต้องการยืนยันว่านี่เป็นสิ่งที่ดี - เพื่อเปลี่ยนความคิดของคนไปสู่การคิดบนเครื่อง มันช่วยได้มากในการหาว่าสิ่งต่าง ๆ ผิดพลาด
นอกจากนี้ยังไม่มีการสนับสนุนการแตกแขนง - กล่าวคือไม่มีเงื่อนไข (ถ้า/อื่น ๆ ) หรือลูป จุดมุ่งหมายคือไม่สร้างคอมพิวเตอร์ที่สมบูรณ์แบบ
ตัวอย่างเพิ่มเติมมีอยู่ในโฟลเดอร์ย่อย example ของโครงการและมีการสอนทีละขั้นตอนบนเว็บไซต์หลัก
Gorgonia มาพร้อมกับการสนับสนุน CUDA นอกกรอบ โปรดดูเอกสารอ้างอิงเกี่ยวกับวิธีการทำงานของ CUDA บนเว็บไซต์ gorgonia.org หรือข้ามไปที่การสอน
เราใช้ Semver 2.0.0 สำหรับการกำหนดเวอร์ชันของเรา ก่อน 1.0 API ของ Gorgonia คาดว่าจะเปลี่ยนไปเล็กน้อย API ถูกกำหนดโดยฟังก์ชั่นที่ส่งออกตัวแปรและวิธีการ สำหรับความมีสติของนักพัฒนามีความแตกต่างเล็กน้อยกับ semver ที่เราจะสมัครก่อนเวอร์ชัน 1.0 มีการระบุไว้ด้านล่าง:
API ของ Gorgonia เป็นของตอนนี้ไม่ถือว่ามีเสถียรภาพ มันจะมีเสถียรภาพจากเวอร์ชัน 1.0 ไปข้างหน้า
Gorgonia รองรับ 2 รุ่นต่ำกว่าสาขาหลักของ GO ซึ่งหมายความว่า Gorgonia จะรองรับ GO เวอร์ชันปัจจุบันที่เปิดตัวในปัจจุบันและรุ่นก่อนหน้า 4 เวอร์ชัน - หากมีบางสิ่งบางอย่างไม่พัง ในกรณีที่เป็นไปได้จะมีการจัดหา Shim (สำหรับสิ่งต่าง ๆ เช่น APIs sort หรือ math/bits ที่ออกมาใน GO 1.9)
เวอร์ชันปัจจุบันของ GO คือ 1.13.1 รุ่นแรกสุดที่ Gorgonia รองรับคือ GO 1.11.x แต่ Gonum รองรับเพียง 1.12+ เท่านั้น ดังนั้นรุ่น GO ขั้นต่ำที่จะเรียกใช้ Master Branch คือไป> 1.12
Gorgonia ทำงานบน:
หากคุณทดสอบ Gorgonia บนแพลตฟอร์มอื่น ๆ โปรดอัปเดตรายการนี้
Gorgonia ใช้คำแนะนำแอสเซมเบลอร์บริสุทธิ์เพื่อเร่งการดำเนินการทางคณิตศาสตร์ น่าเสียดายที่มีเพียง AMD64 เท่านั้นที่ได้รับการสนับสนุน
เห็นได้ชัดว่าเนื่องจากคุณมักจะอ่านสิ่งนี้ใน GitHub GitHub จะเป็นส่วนสำคัญของเวิร์กโฟลว์สำหรับการมีส่วนร่วมในแพ็คเกจนี้
ดูเพิ่มเติมที่: Interning.md
ยินดีต้อนรับการมีส่วนร่วมทั้งหมด อย่างไรก็ตามมีผู้มีส่วนร่วมระดับใหม่ที่เรียกว่าผู้มีส่วนร่วมที่สำคัญ
ผู้สนับสนุนที่สำคัญได้แสดงให้เห็นถึง ความเข้าใจอย่างลึกซึ้ง ว่าห้องสมุดทำงานอย่างไรและ/หรือสภาพแวดล้อม นี่คือตัวอย่างของสิ่งที่ถือเป็นการสนับสนุนที่สำคัญ:
รายชื่อผู้มีส่วนร่วมที่สำคัญจะได้รับการอัปเดตเดือนละครั้ง (ถ้าใครใช้ Gorgonia นั่นคือ)
วิธีการสนับสนุนที่ดีที่สุดในตอนนี้คือการเปิดตั๋วบน GitHub
runtime.GC() ในการทดสอบ? คำตอบของสิ่งนี้เป็นเรื่องง่าย - การออกแบบของแพ็คเกจใช้ CUDA ในลักษณะเฉพาะ: โดยเฉพาะอุปกรณ์และบริบทของ CUDA นั้นเชื่อมโยงกับ VM แทนที่จะอยู่ในระดับแพ็คเกจ ซึ่งหมายความว่าสำหรับทุก VM ที่สร้างขึ้นบริบท CUDA ที่แตกต่างกันถูกสร้างขึ้นต่ออุปกรณ์ต่อ VM วิธีนี้การดำเนินการทั้งหมดจะเล่นได้ดีกับแอพพลิเคชั่นอื่น ๆ ที่อาจใช้ CUDA (สิ่งนี้ต้องผ่านการทดสอบความเครียด)
บริบทของ CUDA จะถูกทำลายเมื่อ VM ได้รับการเก็บรวบรวมขยะ (ด้วยความช่วยเหลือของฟังก์ชั่น finalizer) ในการทดสอบประมาณ 100 VM s ได้รับการสร้างและการรวบรวมขยะสำหรับส่วนใหญ่สามารถพิจารณาสุ่ม สิ่งนี้นำไปสู่กรณีที่ GPU หมดหน่วยความจำเนื่องจากมีการใช้บริบทมากเกินไป
ดังนั้นในตอนท้ายของการทดสอบใด ๆ ที่อาจใช้ GPU การโทร runtime.GC() ถูกสร้างขึ้นเพื่อบังคับคอลเลกชันขยะและปลดปล่อยความทรงจำ GPU
ในการผลิตหนึ่งไม่น่าจะเริ่มต้นที่ VM S จำนวนมากดังนั้นจึงไม่ใช่ปัญหา หากมีให้เปิดตั๋วบน GitHub แล้วเราจะดูวิธีการเพิ่มวิธี Finish() สำหรับ VM S
Gorgonia ได้รับใบอนุญาตภายใต้ตัวแปรของ Apache 2.0 มันเหมือนกับใบอนุญาต Apache 2.0 ยกเว้นไม่สามารถทำกำไรได้ในเชิงพาณิชย์โดยตรงจากแพ็คเกจเว้นแต่คุณจะเป็นผู้สนับสนุนที่สำคัญ (ตัวอย่างเช่นให้การสนับสนุนเชิงพาณิชย์สำหรับแพ็คเกจ) การทำกำไรโดยตรงจากอนุพันธ์ของ Gorgonia (ตัวอย่างเช่นถ้าคุณใช้ Gorgonia เป็นห้องสมุดในผลิตภัณฑ์ของคุณ)
ทุกคนยังคงได้รับอนุญาตให้ใช้ Gorgonia เพื่อวัตถุประสงค์ทางการค้า (ตัวอย่างเช่น: ใช้ในซอฟต์แวร์สำหรับธุรกิจของคุณ)
มีการพึ่งพาน้อยมากที่ Gorgonia ใช้ - และพวกเขาทั้งหมดค่อนข้างเสถียรดังนั้น ณ ตอนนี้ไม่จำเป็นต้องใช้เครื่องมือในการขาย นี่คือรายการของแพ็คเกจภายนอกที่ Gorgonia Calls ได้รับการจัดอันดับตามลำดับของการพึ่งพาว่าแพ็คเกจนี้มี (ถูกละเว้นแพคเกจย่อย):
| บรรจุุภัณฑ์ | ใช้สำหรับ | ความมีชีวิตชีวา | หมายเหตุ | ใบอนุญาต |
|---|---|---|---|---|
| กอนัม/กราฟ | การเรียงลำดับ *ExprGraph | สำคัญยิ่ง. การลบหมายความว่า Gorgonia จะไม่ทำงาน | การพัฒนา Gorgonia มุ่งมั่นที่จะติดตามเวอร์ชันที่ได้รับการปรับปรุงมากที่สุด | ใบอนุญาต Gonum (MIT/BSD-like) |
| Gonum/blas | การดำเนินการเชิงเส้นเทนเซอร์ | สำคัญยิ่ง. การลบหมายความว่า gorgonial จะไม่ทำงาน | การพัฒนา Gorgonia มุ่งมั่นที่จะติดตามเวอร์ชันที่ได้รับการปรับปรุงมากที่สุด | ใบอนุญาต Gonum (MIT/BSD-like) |
| Cu | ไดรเวอร์ Cuda | จำเป็นสำหรับการดำเนินการ cuda | ผู้ดูแลเช่นเดียวกับ Gorgonia | MIT/BSD-like |
| Math32 | การดำเนินการ float32 | สามารถแทนที่ด้วย float32(math.XXX(float64(x))) | ผู้ดูแลเช่นเดียวกับ Gorgonia, API เดียวกับแพ็คเกจ math ในตัว | MIT/BSD-like |
| หอก | ประเภทระบบสำหรับ Gorgonia | กราฟของ Gorgonia นั้นค่อนข้างแน่นกับระบบประเภท | ผู้ดูแลเช่นเดียวกับ Gorgonia | MIT/BSD-like |
| VECF64 | ปรับให้เหมาะสม []float64 | สามารถสร้างได้ในแพ็คเกจ tensor/genlib อย่างไรก็ตามมีการปรับให้เหมาะสมมากขึ้น/จะทำ/จะทำ | ผู้ดูแลเช่นเดียวกับ Gorgonia | MIT/BSD-like |
| VECF32 | ปรับให้เหมาะสม []float32 | สามารถสร้างได้ในแพ็คเกจ tensor/genlib อย่างไรก็ตามมีการปรับให้เหมาะสมมากขึ้น/จะทำ/จะทำ | ผู้ดูแลเช่นเดียวกับ Gorgonia | MIT/BSD-like |
| ชุด | การดำเนินการที่หลากหลาย | สามารถเปลี่ยนได้อย่างง่ายดาย | API ที่มั่นคงสำหรับ 1 ปีที่ผ่านมา | ตั้งค่าใบอนุญาต (MIT/BSD-like) |
| Goggraphviz | ใช้สำหรับการพิมพ์กราฟ | การพิมพ์กราฟมีความสำคัญต่อการดีบักเท่านั้น Gorgonia สามารถอยู่รอดได้หากไม่มีการสูญเสียที่สำคัญ | อัปเดตล่าสุด 12 เมษายน 2560 | ใบอนุญาต Gographviz (Apache 2.0) |
| RNG | ใช้ในการใช้ฟังก์ชั่นผู้ช่วยเพื่อสร้างน้ำหนักเริ่มต้น | สามารถแทนที่ได้ง่ายพอสมควร Gorgonia สามารถทำได้โดยไม่ต้องใช้ฟังก์ชั่นความสะดวกสบายเช่นกัน | ใบอนุญาต RNG (Apache 2.0) | |
| ข้อผิดพลาด | การห่อข้อผิดพลาด | Gorgonia จะไม่ตายหากปราศจากมัน ในความเป็นจริง Gorgonia เคยใช้ Goerrors/ข้อผิดพลาดในอดีต | API ที่มั่นคงสำหรับ 6 เดือนที่ผ่านมา | ใบอนุญาตข้อผิดพลาด (MIT/BSD-like) |
| Gonum/Mat | ความเข้ากันได้ระหว่างเมทริกซ์ของ Tensor และ Gonum | การพัฒนา Gorgonia มุ่งมั่นที่จะติดตามเวอร์ชันที่ได้รับการปรับปรุงมากที่สุด | ใบอนุญาต Gonum (MIT/BSD-like) | |
| เป็นพยาน/ยืนยัน | การทดสอบ | สามารถทำได้โดยไม่ต้องมีอาการปวดอย่างมากในการทดสอบ | ใบอนุญาตเป็นพยาน (MIT/BSD-like) |
นี่คือแพ็คเกจและห้องสมุดที่ได้รับแรงบันดาลใจและได้รับการดัดแปลงจากในกระบวนการเขียน Gorgonia (แพ็คเกจ GO ที่ใช้ได้ประกาศไว้แล้วด้านบน):
| แหล่งที่มา | มันใช้อย่างไร | ใบอนุญาต |
|---|---|---|
| นม | แรงบันดาลใจส่วนใหญ่ อัลกอริทึมดัดแปลงโดยตรงสำหรับวิธีการสองสามอย่าง (มีป้ายกำกับอย่างชัดเจนในเอกสาร) | MIT/BSD-like ใบอนุญาต numpy |
| Theano | แรงบันดาลใจส่วนใหญ่ (ไม่แน่ใจ: จำนวนอัลกอริทึมที่ดัดแปลงโดยตรง) | ใบอนุญาตของ MIT/BSD |
| คาเฟอีน | im2col และ col2im นำมาจากคาเฟอีนโดยตรง อัลกอริธึม Sonvolution ที่ได้รับแรงบันดาลใจจากวิธี Caffee ดั้งเดิม | ใบอนุญาตคาเฟอีน |