Gorgonia adalah perpustakaan yang membantu memfasilitasi pembelajaran mesin di Go. Tulis dan evaluasi persamaan matematika yang melibatkan array multidimensi dengan mudah. Jika ini terdengar seperti Theano atau TensorFlow, itu karena idenya sangat mirip. Secara khusus, perpustakaan cukup rendah, seperti Theano, tetapi memiliki tujuan yang lebih tinggi seperti TensorFlow.
Gorgonia:
Tujuan utama untuk Gorgonia adalah menjadi perpustakaan pembelajaran mesin/grafik yang sangat berkinerja yang dapat mengukur di beberapa mesin. Ini harus membawa daya tarik GO (kompilasi sederhana dan proses penyebaran) ke dunia ML. Namun, masih jauh dari sana saat ini, langkah -langkah bayi sudah ada di sana.
Tujuan sekunder untuk Gorgonia adalah untuk menyediakan platform untuk eksplorasi hal-hal yang tidak belajar secara dalam dan neural yang berhubungan dengan jaringan. Ini termasuk hal-hal seperti pembelajaran neo-hebbian, algoritma pemotongan sudut, algoritma evolusioner, dan sejenisnya.
Alasan utama untuk menggunakan Gorgonia adalah kenyamanan pengembang. Jika Anda menggunakan GO Stack secara luas, sekarang Anda memiliki akses ke kemampuan untuk membuat sistem pembelajaran mesin siap-produksi di lingkungan yang sudah Anda kenal dan nyaman dengannya.
ML/AI pada umumnya biasanya dibagi menjadi dua tahap: tahap eksperimental di mana seseorang membangun berbagai model, tes, dan pengujian ulang; dan keadaan yang dikerahkan di mana model setelah diuji dan dimainkan, dikerahkan. Ini memerlukan peran yang berbeda seperti ilmuwan data dan insinyur data.
Biasanya kedua fase memiliki alat yang berbeda: Python (Pytorch, dll) umumnya digunakan untuk tahap eksperimental, dan kemudian model ditulis ulang dalam beberapa bahasa yang lebih berkinerja seperti C ++ (menggunakan DLIB, MLPACK dll). Tentu saja, saat ini kesenjangan tutup dan orang sering berbagi alat di antara mereka. TensorFlow adalah salah satu alat yang menjembatani kesenjangan.
Gorgonia bertujuan untuk melakukan hal yang sama tetapi untuk lingkungan GO. Gorgonia saat ini cukup berkinerja - kecepatannya sebanding dengan implementasi CPU Pytorch dan TensorFlow. Implementasi GPU agak rewel untuk dibandingkan karena pajak CGO yang berat, tetapi yakinlah bahwa ini adalah area perbaikan aktif.
Paketnya go -gettable: go get -u gorgonia.org/gorgonia .
Gorgonia kompatibel dengan modul GO.
Dokumentasi, referensi, dan tutorial terkini hadir di situs web resmi Gorgonia di https://gorgonia.org.
Proyek Gorgonia memiliki saluran yang kendur di Gopherslack, serta akun Twitter. Pembaruan dan pengumuman resmi akan diposting ke kedua situs tersebut.
Gorgonia bekerja dengan membuat grafik komputasi dan kemudian mengeksekusi. Anggap saja sebagai bahasa pemrograman, tetapi terbatas pada fungsi matematika, dan tidak memiliki kemampuan bercabang (tidak ada jika/kemudian atau loop). Bahkan, ini adalah paradigma dominan yang harus digunakan pengguna. Grafik perhitungan adalah AST.
CNTK Microsoft, dengan brainscript, mungkin yang terbaik dalam mencontohkan gagasan bahwa membangun grafik perhitungan dan menjalankan grafik perhitungan adalah hal yang berbeda dan bahwa pengguna harus berada dalam mode pemikiran yang berbeda ketika melakukannya.
Sementara implementasi Gorgonia tidak menegakkan pemisahan pemikiran sejauh CNTK's Brainscript, sintaksnya memang sedikit membantu.
Inilah contohnya - katakanlah Anda ingin mendefinisikan ekspresi matematika z = x + y . Begini cara Anda melakukannya:
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
} Anda mungkin mencatat bahwa itu sedikit lebih bertele -tele daripada paket lain yang sama. Misalnya, alih -alih menyusun ke fungsi yang dapat dipanggil, Gorgonia secara khusus dikompilasi menjadi *program yang membutuhkan *TapeMachine untuk dijalankan. Ini juga membutuhkan panggilan manual Let(...) .
Penulis ingin berpendapat bahwa ini adalah hal yang baik - untuk mengubah pemikiran seseorang ke pemikiran berbasis mesin. Ini sangat membantu dalam mencari tahu di mana keadaan mungkin salah.
Selain itu, tidak ada dukungan untuk percabangan - artinya, tidak ada kondisional (jika/lain) atau loop. Tujuannya bukan untuk membangun komputer Turing-Complete.
Lebih banyak contoh hadir dalam example subfolder proyek, dan tutorial langkah demi langkah hadir di situs web utama
Gorgonia hadir dengan dukungan Cuda di luar kotak. Silakan lihat dokumentasi referensi tentang cara kerja CUDA di situs web Gorgonia.org, atau melompat ke tutorial.
Kami menggunakan SEMVER 2.0.0 untuk versi kami. Sebelum 1.0, API Gorgonia diperkirakan akan berubah sedikit. API ditentukan oleh fungsi, variabel, dan metode yang diekspor. Untuk kewarasan pengembang, ada perbedaan kecil dengan SEMVER yang akan kami terapkan sebelum versi 1.0. Mereka disebutkan di bawah ini:
API Gorgonia adalah saat ini, tidak dianggap stabil. Ini akan stabil dari versi 1.0 ke depan.
Gorgonia mendukung 2 versi di bawah cabang utama GO. Ini berarti Gorgonia akan mendukung versi GO yang dirilis saat ini, dan hingga 4 versi sebelumnya - memberikan sesuatu tidak rusak. Jika memungkinkan shim akan disediakan (untuk hal -hal seperti API sort Baru atau math/bits yang keluar di Go 1.9).
Versi GO saat ini adalah 1.13.1. Versi paling awal dukungan Gorgonia adalah GO 1.11.x tetapi Gonum hanya mendukung 1.12+. Oleh karena itu, versi GO minimum untuk menjalankan cabang master adalah GO> 1.12.
Gorgonia berjalan di:
Jika Anda telah menguji Gorgonia di platform lain, silakan perbarui daftar ini.
Gorgonia menggunakan beberapa instruksi assembler murni untuk mempercepat beberapa operasi matematika. Sayangnya, hanya AMD64 yang didukung.
Jelas, karena Anda kemungkinan besar membaca ini di GitHub, GitHub akan membentuk bagian utama dari alur kerja untuk berkontribusi pada paket ini.
Lihat juga: Contributing.md
Semua kontribusi dipersilakan. Namun, ada kelas kontributor baru, yang disebut kontributor yang signifikan.
Kontributor yang signifikan telah menunjukkan pemahaman yang mendalam tentang bagaimana perpustakaan bekerja dan/atau sekitarnya. Berikut adalah contoh dari apa yang merupakan kontribusi yang signifikan:
Daftar kontributor yang signifikan akan diperbarui sebulan sekali (jika ada yang bahkan menggunakan Gorgonia).
Cara dukungan terbaik saat ini adalah dengan membuka tiket di GitHub.
runtime.GC() yang tampaknya acak dalam tes? Jawabannya sederhana - desain paket menggunakan CUDA dengan cara tertentu: khususnya, perangkat dan konteks CUDA terikat pada VM , bukan pada level paket. Ini berarti untuk setiap VM yang dibuat, konteks CUDA yang berbeda dibuat per perangkat per VM . Dengan cara ini semua operasi akan bermain baik dengan aplikasi lain yang mungkin menggunakan CUDA (ini perlu diuji stres, namun).
Konteks CUDA hanya dihancurkan ketika VM dikumpulkan sampah (dengan bantuan fungsi finalizer). Dalam tes, sekitar 100 VM dibuat, dan pengumpulan sampah untuk sebagian besar dapat dianggap acak. Hal ini mengarah pada kasus -kasus di mana GPU kehabisan memori karena ada terlalu banyak konteks yang digunakan.
Oleh karena itu pada akhir setiap tes yang dapat menggunakan GPU, panggilan runtime.GC() dilakukan untuk memaksa pengumpulan sampah, membebaskan ingatan GPU.
Dalam produksi, seseorang tidak mungkin memulai sebanyak itu VM , oleh karena itu itu bukan masalah. Jika ada, buka tiket di GitHub, dan kami akan mencari untuk menambahkan metode Finish() untuk VM s.
Gorgonia dilisensikan di bawah varian Apache 2.0. Ini sama dengan lisensi Apache 2.0, kecuali tidak dapat untung secara komersial langsung dari paket kecuali Anda seorang kontributor yang signifikan (misalnya, memberikan dukungan komersial untuk paket). Sangat baik untuk mendapatkan keuntungan langsung dari turunan Gorgonia (misalnya, jika Anda menggunakan Gorgonia sebagai perpustakaan di produk Anda)
Setiap orang masih diizinkan menggunakan Gorgonia untuk tujuan komersial (misalnya: menggunakannya dalam perangkat lunak untuk bisnis Anda).
Ada sangat sedikit ketergantungan yang digunakan Gorgonia - dan semuanya cukup stabil, jadi sekarang tidak ada kebutuhan untuk alat vendoring. Ini adalah daftar paket eksternal yang disebut Gorgonia, peringkat dalam urutan ketergantungan yang dimiliki paket ini (sub-paket dihilangkan):
| Kemasan | Digunakan untuk | Daya hidup | Catatan | Lisensi |
|---|---|---|---|---|
| gonum/grafik | Penyortiran *ExprGraph | Vital. Penghapusan berarti Gorgonia tidak akan berhasil | Pengembangan Gorgonia berkomitmen untuk mengikuti versi yang paling diperbarui | Lisensi Gonum (MIT/BSD) |
| gonum/blas | Operasi Aljabar Linear Subpackage Tensor | Vital. Penghapusan berarti Gorgonial tidak akan berhasil | Pengembangan Gorgonia berkomitmen untuk mengikuti versi yang paling diperbarui | Lisensi Gonum (MIT/BSD) |
| cu | Pengemudi Cuda | Diperlukan untuk operasi CUDA | Pemeliharaan yang sama seperti Gorgonia | MIT/BSD seperti |
| Math32 | Operasi float32 | Dapat diganti dengan float32(math.XXX(float64(x))) | Pemeliharaan yang sama dengan Gorgonia, API yang sama dengan paket math bawaan | MIT/BSD seperti |
| hm | Ketik Sistem untuk Gorgonia | Grafik Gorgonia cukup erat digabungkan dengan sistem jenis | Pemeliharaan yang sama seperti Gorgonia | MIT/BSD seperti |
| VECF64 | Operasi []float64 yang dioptimalkan | Dapat dihasilkan dalam paket tensor/genlib . Namun, banyak optimisasi telah dibuat/akan dibuat | Pemeliharaan yang sama seperti Gorgonia | MIT/BSD seperti |
| VECF32 | Operasi []float32 yang dioptimalkan | Dapat dihasilkan dalam paket tensor/genlib . Namun, banyak optimisasi telah dibuat/akan dibuat | Pemeliharaan yang sama seperti Gorgonia | MIT/BSD seperti |
| mengatur | Berbagai operasi yang ditetapkan | Dapat dengan mudah diganti | API stabil selama 1 tahun terakhir | Tetapkan lisensi (mit/bsd) |
| GOGRAPHVIZ | Digunakan untuk mencetak grafik | Pencetakan grafik hanya penting untuk debugging. Gorgonia dapat bertahan hidup tanpa, tetapi dengan kehilangan fitur utama (tapi bisa dibilang tidak vital) | Pembaruan Terakhir 12 April 2017 | Lisensi GOGRAPHVIZ (Apache 2.0) |
| rng | Digunakan untuk mengimplementasikan fungsi pembantu untuk menghasilkan bobot awal | Dapat diganti dengan cukup mudah. Gorgonia juga dapat dilakukan tanpa fungsi kenyamanan | Lisensi RNG (Apache 2.0) | |
| kesalahan | Wrapping kesalahan | Gorgonia tidak akan mati tanpanya. Sebenarnya Gorgonia juga menggunakan Goerrors/kesalahan di masa lalu. | API stabil selama 6 bulan terakhir | Lisensi Kesalahan (MIT/BSD) |
| gonum/mat | Kompatibilitas antara Tensor dan Gonum's Matrix | Pengembangan Gorgonia berkomitmen untuk mengikuti versi yang paling diperbarui | Lisensi Gonum (MIT/BSD) | |
| bersaksi/menegaskan | Pengujian | Dapat dilakukan tanpa tetapi akan menjadi rasa sakit besar di pantat untuk diuji | Lisensi Bersaksi (MIT/BSD) |
Ini adalah paket dan perpustakaan yang menginspirasi dan diadaptasi dari dalam proses penulisan Gorgonia (paket GO yang digunakan sudah dinyatakan di atas):
| Sumber | Bagaimana itu digunakan | Lisensi |
|---|---|---|
| Numpy | Menginspirasi porsi besar. Algoritma yang diadaptasi secara langsung untuk beberapa metode (secara eksplisit diberi label dalam dokumen) | MIT/BSD seperti. Lisensi Numpy |
| Theano | Menginspirasi porsi besar. (Tidak yakin: jumlah algoritma yang disesuaikan secara langsung) | Lisensi Theano seperti MIT/BSD |
| Caffe | im2col dan col2im langsung diambil dari Caffe. Algoritma konvolusi yang terinspirasi oleh metode caffee asli | Lisensi Caffe |