Se você gosta do projeto, por favor ★ Estrela este repositório para mostrar seu apoio! ?
15 de janeiro de 2024 - Ao refletir sobre a jornada de Spago, estou cheio de gratidão pela experiência enriquecedora que me proporcionou. O domínio de Go e revisitar os fundamentos do aprendizado profundo através do Spago tem sido imensamente gratificante. Os recursos exclusivos do Spago, especialmente seu gráfico de computação assíncrona e focados na codificação limpa, tornaram um projeto extraordinário para trabalhar. Nosso objetivo era criar uma estrutura minimalista de ML em Go, eliminando a dependência do Python na produção, permitindo a criação de executáveis independentes. Essa abordagem do Spago alimentou com sucesso vários de meus projetos em desafios a ambientes de produção.
No entanto, o esforço de elevar o Spago a um nível em que pode competir efetivamente no 'espaço da IA' em evolução, que agora envolve extensivamente a computação nas GPUs, requer compromisso substancial. Ao mesmo tempo, a visão que Spago aspirou a alcançar agora está sendo impressionantemente realizada pelo projeto de vela em Rust. Com minha capacidade limitada de dedicar a atenção necessária ao Spago e, na ausência de uma equipe de manutenção de apoio, tomei a decisão pragmática de pausar o projeto por enquanto.
Sou profundamente grato pela jornada que Spago me aceitou e pela comunidade que a apoiou. Enquanto continuamos a explorar o campo em constante evolução do aprendizado de máquina, estou ansioso pelos desenvolvimentos interessantes que estão por vir.
Atenciosamente,
Matteo Grella
O Spago é uma biblioteca de aprendizado de máquina escrita na Pure Go, projetada para apoiar arquiteturas neurais relevantes no processamento de linguagem natural .
O Spago é independente, pois usa seu próprio gráfico computacional leve para treinamento e inferência, fácil de entender do início ao fim.
Ele fornece:
Se você estiver interessado em funcionalidades relacionadas ao NLP, certifique-se de explorar o pacote Cybertron!
Requisitos:
Clone este repositório ou obtenha a biblioteca:
go get -u github.com/nlpodyssey/spagoUm bom lugar para começar é observando a implementação de modelos neurais internos, como o LSTM.
Aqui está um exemplo de como calcular a soma de duas variáveis:
package main
import (
"fmt"
"log"
"github.com/nlpodyssey/spago/ag"
"github.com/nlpodyssey/spago/mat"
)
func main () {
// define the type of the elements in the tensors
type T = float32
// create a new node of type variable with a scalar
a := mat . Scalar ( T ( 2.0 ), mat . WithGrad ( true )) // create another node of type variable with a scalar
b := mat . Scalar ( T ( 5.0 ), mat . WithGrad ( true )) // create an addition operator (the calculation is actually performed here)
c := ag . Add ( a , b )
// print the result
fmt . Printf ( "c = %v (float%d) n " , c . Value (), c . Value (). Item (). BitSize ())
c . AccGrad ( mat . Scalar ( T ( 0.5 )))
if err := ag . Backward ( c ); err != nil {
log . Fatalf ( "error during Backward(): %v" , err )
}
fmt . Printf ( "ga = %v n " , a . Grad ())
fmt . Printf ( "gb = %v n " , b . Grad ())
}Saída:
c = [7] (float32)
ga = [0.5]
gb = [0.5]Aqui está uma simples implementação da fórmula perceptron:
package main
import (
"fmt"
. "github.com/nlpodyssey/spago/ag"
"github.com/nlpodyssey/spago/mat"
)
func main () {
x := mat . Scalar ( - 0.8 )
w := mat . Scalar ( 0.4 )
b := mat . Scalar ( - 0.2 )
y := Sigmoid ( Add ( Mul ( w , x ), b ))
fmt . Printf ( "y = %0.3f n " , y . Value (). Item ())
}Se você acha que algo está faltando ou pode ser melhorado, abre problemas e puxe solicitações.
Para começar a contribuir, verifique as diretrizes contribuintes.
Nós o incentivamos a criar um problema, pois isso contribuirá para o crescimento da comunidade. No entanto, se você preferir se comunicar conosco em particular, sinta -se à vontade para enviar um e -mail para Matteo Grella com qualquer dúvida ou comentário que possa ter.