chickadee » nanograd » make-dense-layer

(make-dense-layer input-size output-size #!key (activation (make-identity)) (use-bias #t) (dtype 'f32) (name "Dense")) -> layerprocedure

Creates a fully-connected (dense) layer with Xavier/Glorot initialization. Supports both single vectors and batches.

input-size
number of input features
output-size
number of output features
activation
activation function object (default identity)
use-bias
whether to include bias term (default #t)
dtype
'f32 or 'f64 (default 'f32)
name
layer name for debugging

Input shapes:

  • 1D: (input_size,) → output: (output_size,)
  • 2D: (batch_size, input_size) → output: (batch_size, output_size)

For 2D inputs, uses BLAS GEMM for efficient batch processing.

(define layer (make-dense-layer 784 128 
                                activation: (make-relu)
                                name: "Hidden1"))

; Single input
(define x (make-tensor32 (make-f32vector 784) '(784)))
(define output (forward layer x))  ; Shape: (128,)

; Batch input
(define batch-x (make-tensor32 (make-f32vector (* 32 784)) '(32 784)))
(define batch-output (forward layer batch-x))  ; Shape: (32, 128)