Quickstart: from data to prediction in ~10 lines

# Vignette code is executed locally (NOT_CRAN=true) but not on CRAN, where
# the CPU fallback would multi-thread and trip the "CPU time > elapsed" NOTE.
knitr::opts_chunk$set(eval = identical(Sys.getenv("NOT_CRAN"), "true"))

The shortest possible path with ggmlR: take a built-in dataset, train a neural network, and predict — using only the core Keras-like API, no tidymodels or mlr3. (For those ecosystems see the tidymodels and mlr3 vignettes.)

library(ggmlR)

x <- scale(as.matrix(iris[, 1:4]))            # 4 numeric features
y <- model.matrix(~ Species - 1, iris)        # one-hot, 3 classes

model <- ggml_model_sequential() |>
  ggml_layer_dense(16L, activation = "relu", input_shape = 4L) |>
  ggml_layer_dense(3L,  activation = "softmax") |>
  ggml_compile(optimizer = "adam", loss = "categorical_crossentropy")

model <- ggml_fit(model, x, y, epochs = 100L, verbose = 0L)

pred  <- ggml_predict(model, x)               # [150 x 3] class probabilities
acc   <- mean(max.col(pred) == as.integer(iris$Species))
cat(sprintf("accuracy: %.3f\n", acc))

That's it — load data, stack layers, ggml_compile(), ggml_fit(), ggml_predict(). ggmlR runs on the GPU via Vulkan automatically when available and falls back to the CPU otherwise; call ggml_model_backend(model) to see which backend was actually used.

Next steps



Try the ggmlR package in your browser

Any scripts or data that you put into this service are public.

ggmlR documentation built on July 14, 2026, 1:08 a.m.