# Predicting with a Trained Model > The former `nkululeko.demo` module has been merged into the unified > `nkululeko.predict` module. This page shows how to reproduce the old demo > workflow — testing a previously trained model with an audio file, a list of > files or live microphone input — using `nkululeko.predict --type model`. > See [predict.md](predict.md) for the full reference. ## Concept refresher - **train** is used to train a supervised model. - **dev** is used to evaluate the model during development (early stopping, hyperparameter tuning). - **test** is the held-out set that should only be used at the very end. Classical models (SVM, XGB) usually only need train and test. Neural-network models (MLP, CNN) typically use train, dev and test. ## Configuration Before predicting with a saved model you need to have trained it once. Add the following to your INI: ```ini [EXP] save = True [MODEL] save = True ``` Then train the experiment as usual: ```bash python -m nkululeko.nkululeko --config myconfig.ini ``` ## Predict a single file ```bash python -m nkululeko.predict \ --config data/ravdess/exp1.ini \ --type model \ --file data/ravdess/Actor_01/03-01-01-01-01-01-01.wav ``` The output (printed to stdout and written to `data/ravdess/Actor_01/03-01-01-01-01-01-01_result.txt`): ``` DEBUG: predict: nkululeko 1.6.3: unified predict data/ravdess/...wav angry: 0.314 data/ravdess/...wav happy: 0.312 data/ravdess/...wav neutral: 0.042 data/ravdess/...wav sad: 0.332 data/ravdess/...wav predicted: sad DEBUG: predict: DONE ``` ## Predict a list of files To process many files and write a single CSV: ```bash python -m nkululeko.predict \ --config data/ravdess/exp1.ini \ --type model \ --list data/ravdess/ravdess_test.csv \ --outfile /tmp/ravdess_test_predict.csv ``` The original columns of `ravdess_test.csv` are preserved in the output. For a classification model the additional columns are one score column per class plus `predicted`. For a regression model a single `predicted` column is added. Example list CSV (audformat, filewise index): ```text file ./Actor_21/03-01-07-01-01-01-21.wav ./Actor_21/03-01-06-01-02-02-21.wav ./Actor_21/03-01-06-02-01-02-21.wav ``` Example output CSV: ```text file,start,end,angry,happy,neutral,sad,predicted ./Actor_21/03-01-07-01-01-01-21.wav,0 days,,0.314,0.315,0.038,0.332,sad ./Actor_21/03-01-06-01-02-02-21.wav,0 days,,0.314,0.313,0.041,0.332,sad ./Actor_21/03-01-06-02-01-02-21.wav,0 days,,0.314,0.316,0.037,0.332,sad ``` ## Predict every audio file in a folder ```bash python -m nkululeko.predict \ --config data/ravdess/exp1.ini \ --type model \ --folder ./Actor_21 \ --outfile /tmp/actor21_predict.csv ``` ## Live microphone ```bash python -m nkululeko.predict --config data/ravdess/exp1.ini --type model --mic ``` The microphone loop records `5` seconds at `16 kHz`, runs the model and prints the per-class scores to stdout. Press *q* + *Enter* to exit. ## Related - [predict.md](predict.md) — full reference for `nkululeko.predict`. - [test_new_database.md](test_new_database.md) — automatic fast path: run `nkululeko.nkululeko` with `DATA.tests` set to evaluate a saved model on a new database without retraining. - [test_module.md](test_module.md) — using the predict module to re-evaluate on labeled test data. - Background blog post: