Chapter 16
layers/embedding
github.com/openfluke/welvet/layers/embedding✅
Why it exists
Token IDs must gather rows from a table — not a Dense MatVec — with scatter grads on backward.
What it is
Config{VocabSize, EmbeddingDim, SeqLen}; table on weights.Store; host gather on SIMD/WebGPU today.
Go example
Run:
cd welvet/examples/16-embedding && source ../env.sh && go run .package main
import (
"fmt"
"github.com/openfluke/welvet/core"
"github.com/openfluke/welvet/layers/embedding"
)
func main() {
l, err := embedding.New(embedding.Config{VocabSize: 32, EmbeddingDim: 16, SeqLen: 4})
if err != nil {
panic(err)
}
ids := core.NewTensor[float32](1, 4)
ids.Data[0], ids.Data[1] = 3, 7
_, y, err := embedding.Forward(l, ids)
fmt.Println(y.Shape, err)
}
Output
[1 4 16] <nil>