nkululeko 0.88.11__tar.gz → 0.89.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {nkululeko-0.88.11 → nkululeko-0.89.0}/CHANGELOG.md +12 -2
- {nkululeko-0.88.11/nkululeko.egg-info → nkululeko-0.89.0}/PKG-INFO +18 -11
- {nkululeko-0.88.11 → nkululeko-0.89.0}/README.md +5 -8
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/constants.py +1 -1
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feats_agender.py +4 -3
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feats_auddim.py +2 -3
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feats_audmodel.py +2 -3
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feats_opensmile.py +1 -1
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feats_oxbow.py +6 -10
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/featureset.py +1 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/models/model.py +42 -35
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/models/model_cnn.py +4 -4
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/models/model_mlp.py +1 -1
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/models/model_mlp_regression.py +2 -2
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/models/model_tree.py +3 -1
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/reporting/reporter.py +18 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/utils/util.py +5 -4
- {nkululeko-0.88.11 → nkululeko-0.89.0/nkululeko.egg-info}/PKG-INFO +18 -11
- {nkululeko-0.88.11 → nkululeko-0.89.0}/LICENSE +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/aesdd/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/androids/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/ased/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/asvp-esd/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/baved/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/cafe/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/clac/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/cmu-mosei/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/demos/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/ekorpus/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/emns/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/emofilm/convert_to_16k.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/emofilm/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/emorynlp/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/emov-db/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/emovo/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/emozionalmente/create.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/enterface/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/esd/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/gerparas/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/iemocap/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/jl/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/jtes/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/meld/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/mesd/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/mess/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/mlendsnd/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/msp-improv/process_database2.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/msp-podcast/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/oreau2/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/portuguese/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/ravdess/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/ravdess/process_database_speaker.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/savee/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/shemo/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/subesco/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/tess/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/thorsten-emotional/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/urdu/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/data/vivae/process_database.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/docs/source/conf.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/meta/demos/demo_best_model.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/meta/demos/my_experiment.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/meta/demos/my_experiment_local.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/meta/demos/plot_faster_anim.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/__init__.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/aug_train.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/augment.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/augmenting/__init__.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/augmenting/augmenter.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/augmenting/randomsplicer.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/augmenting/randomsplicing.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/augmenting/resampler.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/autopredict/__init__.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/autopredict/ap_age.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/autopredict/ap_arousal.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/autopredict/ap_dominance.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/autopredict/ap_gender.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/autopredict/ap_mos.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/autopredict/ap_pesq.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/autopredict/ap_sdr.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/autopredict/ap_snr.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/autopredict/ap_stoi.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/autopredict/ap_valence.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/autopredict/estimate_snr.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/cacheddataset.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/data/__init__.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/data/dataset.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/data/dataset_csv.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/demo.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/demo_feats.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/demo_predictor.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/ensemble.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/experiment.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/explore.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/export.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/__init__.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feats_agender_agender.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feats_analyser.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feats_ast.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feats_clap.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feats_hubert.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feats_import.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feats_mld.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feats_mos.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feats_praat.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feats_snr.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feats_spectra.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feats_spkrec.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feats_squim.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feats_trill.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feats_wav2vec2.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feats_wavlm.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feats_whisper.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feat_extract/feinberg_praat.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/feature_extractor.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/file_checker.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/filter_data.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/glob_conf.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/losses/__init__.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/losses/loss_ccc.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/losses/loss_softf1loss.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/modelrunner.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/models/__init__.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/models/model_bayes.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/models/model_gmm.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/models/model_knn.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/models/model_knn_reg.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/models/model_lin_reg.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/models/model_svm.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/models/model_svr.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/models/model_tree_reg.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/models/model_tuned.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/models/model_xgb.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/models/model_xgr.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/multidb.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/nkuluflag.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/nkululeko.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/plots.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/predict.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/reporting/__init__.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/reporting/defines.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/reporting/latex_writer.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/reporting/report.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/reporting/report_item.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/reporting/result.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/resample.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/runmanager.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/scaler.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/segment.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/segmenting/__init__.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/segmenting/seg_inaspeechsegmenter.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/segmenting/seg_silero.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/syllable_nuclei.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/test.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/test_predictor.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/test_pretrain.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/utils/__init__.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/utils/files.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko/utils/stats.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko.egg-info/SOURCES.txt +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko.egg-info/dependency_links.txt +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko.egg-info/requires.txt +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/nkululeko.egg-info/top_level.txt +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/pyproject.toml +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/setup.cfg +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/setup.py +0 -0
- {nkululeko-0.88.11 → nkululeko-0.89.0}/venv/bin/activate_this.py +0 -0
@@ -1,6 +1,16 @@
|
|
1
1
|
Changelog
|
2
2
|
=========
|
3
3
|
|
4
|
+
Version 0.89.0
|
5
|
+
--------------
|
6
|
+
* added Roc plots and classification report on Debug
|
7
|
+
|
8
|
+
|
9
|
+
Version 0.88.12
|
10
|
+
---------------
|
11
|
+
* added n_jobs for sklearn processing
|
12
|
+
* re_named num_workers n_jobs
|
13
|
+
|
4
14
|
Version 0.88.11
|
5
15
|
--------------
|
6
16
|
* removed hack in Praat script
|
@@ -470,9 +480,9 @@ Version 0.66.3
|
|
470
480
|
|
471
481
|
Version 0.66.2
|
472
482
|
--------------
|
473
|
-
* enabled data-
|
483
|
+
* enabled data-pacthes with quotes
|
474
484
|
* enabled missing category labels
|
475
|
-
* used
|
485
|
+
* used tqdm for progress display
|
476
486
|
|
477
487
|
Version 0.66.1
|
478
488
|
--------------
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: nkululeko
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.89.0
|
4
4
|
Summary: Machine learning audio prediction experiments based on templates
|
5
5
|
Home-page: https://github.com/felixbur/nkululeko
|
6
6
|
Author: Felix Burkhardt
|
@@ -204,7 +204,7 @@ All of them take *--config <my_config.ini>* as an argument.
|
|
204
204
|
* *configurations*: which experiments to combine
|
205
205
|
* *--method* (optional): majority_voting, mean (default), max, sum, uncertainty, uncertainty_weighted, confidence_weighted, performance_weighted
|
206
206
|
* *--threshold*: uncertainty threshold (1.0 means no threshold)
|
207
|
-
* *--
|
207
|
+
* *--weights*: weights for performance_weighted method (could be from previous UAR, ACC)
|
208
208
|
* *--outfile* (optional): name of CSV file for output (default: ensemble_result.csv)
|
209
209
|
* *--no_labels* (optional): indicate that no ground truth is given
|
210
210
|
* **nkululeko.multidb**: do [multiple experiments](http://blog.syntheticspeech.de/2024/01/02/nkululeko-compare-several-databases/), comparing several databases cross and in itself
|
@@ -220,14 +220,11 @@ All of them take *--config <my_config.ini>* as an argument.
|
|
220
220
|
* **nkululeko.predict**: [predict features](http://blog.syntheticspeech.de/2023/08/16/nkululeko-how-to-predict-labels-for-your-data-from-existing-models-and-check-them/) like SNR, MOS, arousal/valence, age/gender, with DNN models
|
221
221
|
* **nkululeko.segment**: [segment a database](http://blog.syntheticspeech.de/2023/07/14/nkululeko-segmenting-a-database/) based on VAD (voice activity detection)
|
222
222
|
* **nkululeko.resample**: check on all [sampling rates and change](http://blog.syntheticspeech.de/2023/08/31/how-to-fix-different-sampling-rates-in-a-dataset-with-nkululeko/) to 16kHz
|
223
|
-
* **nkululeko.nkuluflag**: a convenient module to specify configuration parameters on the command-line.
|
224
|
-
* usage: nkuluflag.py [-h] [--config CONFIG] [--data [DATA ...]] [--label [LABEL ...]] [--tuning_params [TUNING_PARAMS ...]] [--layers [LAYERS ...]] [--model MODEL] [--feat FEAT] [--set SET]
|
225
|
-
[--with_os WITH_OS] [--target TARGET] [--epochs EPOCHS] [--runs RUNS] [--learning_rate LEARNING_RATE] [--drop DROP]
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
223
|
+
* **nkululeko.nkuluflag**: a convenient module to specify configuration parameters on the command-line. Usage:
|
230
224
|
|
225
|
+
```bash
|
226
|
+
$ python -m nkululeko.nkuluflag.py [-h] [--config CONFIG] [--data [DATA ...]] [--label [LABEL ...]] [--tuning_params [TUNING_PARAMS ...]] [--layers [LAYERS ...]] [--model MODEL] [--feat FEAT] [--set SET] [--with_os WITH_OS] [--target TARGET] [--epochs EPOCHS] [--runs RUNS] [--learning_rate LEARNING_RATE] [--drop DROP]
|
227
|
+
```
|
231
228
|
|
232
229
|
There's my [blog](http://blog.syntheticspeech.de/?s=nkululeko) with tutorials:
|
233
230
|
* [Introduction](http://blog.syntheticspeech.de/2021/08/04/machine-learning-experiment-framework/)
|
@@ -359,6 +356,16 @@ F. Burkhardt, Johannes Wagner, Hagen Wierstorf, Florian Eyben and Björn Schulle
|
|
359
356
|
Changelog
|
360
357
|
=========
|
361
358
|
|
359
|
+
Version 0.89.0
|
360
|
+
--------------
|
361
|
+
* added Roc plots and classification report on Debug
|
362
|
+
|
363
|
+
|
364
|
+
Version 0.88.12
|
365
|
+
---------------
|
366
|
+
* added n_jobs for sklearn processing
|
367
|
+
* re_named num_workers n_jobs
|
368
|
+
|
362
369
|
Version 0.88.11
|
363
370
|
--------------
|
364
371
|
* removed hack in Praat script
|
@@ -828,9 +835,9 @@ Version 0.66.3
|
|
828
835
|
|
829
836
|
Version 0.66.2
|
830
837
|
--------------
|
831
|
-
* enabled data-
|
838
|
+
* enabled data-pacthes with quotes
|
832
839
|
* enabled missing category labels
|
833
|
-
* used
|
840
|
+
* used tqdm for progress display
|
834
841
|
|
835
842
|
Version 0.66.1
|
836
843
|
--------------
|
@@ -160,7 +160,7 @@ All of them take *--config <my_config.ini>* as an argument.
|
|
160
160
|
* *configurations*: which experiments to combine
|
161
161
|
* *--method* (optional): majority_voting, mean (default), max, sum, uncertainty, uncertainty_weighted, confidence_weighted, performance_weighted
|
162
162
|
* *--threshold*: uncertainty threshold (1.0 means no threshold)
|
163
|
-
* *--
|
163
|
+
* *--weights*: weights for performance_weighted method (could be from previous UAR, ACC)
|
164
164
|
* *--outfile* (optional): name of CSV file for output (default: ensemble_result.csv)
|
165
165
|
* *--no_labels* (optional): indicate that no ground truth is given
|
166
166
|
* **nkululeko.multidb**: do [multiple experiments](http://blog.syntheticspeech.de/2024/01/02/nkululeko-compare-several-databases/), comparing several databases cross and in itself
|
@@ -176,14 +176,11 @@ All of them take *--config <my_config.ini>* as an argument.
|
|
176
176
|
* **nkululeko.predict**: [predict features](http://blog.syntheticspeech.de/2023/08/16/nkululeko-how-to-predict-labels-for-your-data-from-existing-models-and-check-them/) like SNR, MOS, arousal/valence, age/gender, with DNN models
|
177
177
|
* **nkululeko.segment**: [segment a database](http://blog.syntheticspeech.de/2023/07/14/nkululeko-segmenting-a-database/) based on VAD (voice activity detection)
|
178
178
|
* **nkululeko.resample**: check on all [sampling rates and change](http://blog.syntheticspeech.de/2023/08/31/how-to-fix-different-sampling-rates-in-a-dataset-with-nkululeko/) to 16kHz
|
179
|
-
* **nkululeko.nkuluflag**: a convenient module to specify configuration parameters on the command-line.
|
180
|
-
* usage: nkuluflag.py [-h] [--config CONFIG] [--data [DATA ...]] [--label [LABEL ...]] [--tuning_params [TUNING_PARAMS ...]] [--layers [LAYERS ...]] [--model MODEL] [--feat FEAT] [--set SET]
|
181
|
-
[--with_os WITH_OS] [--target TARGET] [--epochs EPOCHS] [--runs RUNS] [--learning_rate LEARNING_RATE] [--drop DROP]
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
179
|
+
* **nkululeko.nkuluflag**: a convenient module to specify configuration parameters on the command-line. Usage:
|
186
180
|
|
181
|
+
```bash
|
182
|
+
$ python -m nkululeko.nkuluflag.py [-h] [--config CONFIG] [--data [DATA ...]] [--label [LABEL ...]] [--tuning_params [TUNING_PARAMS ...]] [--layers [LAYERS ...]] [--model MODEL] [--feat FEAT] [--set SET] [--with_os WITH_OS] [--target TARGET] [--epochs EPOCHS] [--runs RUNS] [--learning_rate LEARNING_RATE] [--drop DROP]
|
183
|
+
```
|
187
184
|
|
188
185
|
There's my [blog](http://blog.syntheticspeech.de/?s=nkululeko) with tutorials:
|
189
186
|
* [Introduction](http://blog.syntheticspeech.de/2021/08/04/machine-learning-experiment-framework/)
|
@@ -1,2 +1,2 @@
|
|
1
|
-
VERSION="0.
|
1
|
+
VERSION="0.89.0"
|
2
2
|
SAMPLING_RATE = 16000
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
from nkululeko.feat_extract.featureset import Featureset
|
4
4
|
import os
|
5
|
+
|
5
6
|
# import pandas as pd
|
6
7
|
import audeer
|
7
8
|
import nkululeko.glob_conf as glob_conf
|
@@ -10,6 +11,7 @@ import numpy as np
|
|
10
11
|
import audinterface
|
11
12
|
import torch
|
12
13
|
|
14
|
+
|
13
15
|
class AgenderSet(Featureset):
|
14
16
|
"""
|
15
17
|
Embeddings from the wav2vec2. based model finetuned on agender data, described in the paper
|
@@ -30,8 +32,7 @@ class AgenderSet(Featureset):
|
|
30
32
|
if not os.path.isdir(model_root):
|
31
33
|
cache_root = audeer.mkdir("cache")
|
32
34
|
model_root = audeer.mkdir(model_root)
|
33
|
-
archive_path = audeer.download_url(
|
34
|
-
model_url, cache_root, verbose=True)
|
35
|
+
archive_path = audeer.download_url(model_url, cache_root, verbose=True)
|
35
36
|
audeer.extract_archive(archive_path, model_root)
|
36
37
|
cuda = "cuda" if torch.cuda.is_available() else "cpu"
|
37
38
|
device = self.util.config_val("MODEL", "device", cuda)
|
@@ -62,7 +63,7 @@ class AgenderSet(Featureset):
|
|
62
63
|
},
|
63
64
|
sampling_rate=16000,
|
64
65
|
resample=True,
|
65
|
-
num_workers=
|
66
|
+
num_workers=self.n_jobs,
|
66
67
|
verbose=True,
|
67
68
|
)
|
68
69
|
self.df = hidden_states.process_index(self.data_df.index)
|
@@ -32,8 +32,7 @@ class AuddimSet(Featureset):
|
|
32
32
|
if not os.path.isdir(model_root):
|
33
33
|
cache_root = audeer.mkdir("cache")
|
34
34
|
model_root = audeer.mkdir(model_root)
|
35
|
-
archive_path = audeer.download_url(
|
36
|
-
model_url, cache_root, verbose=True)
|
35
|
+
archive_path = audeer.download_url(model_url, cache_root, verbose=True)
|
37
36
|
audeer.extract_archive(archive_path, model_root)
|
38
37
|
cuda = "cuda" if torch.cuda.is_available() else "cpu"
|
39
38
|
device = self.util.config_val("MODEL", "device", cuda)
|
@@ -63,7 +62,7 @@ class AuddimSet(Featureset):
|
|
63
62
|
},
|
64
63
|
sampling_rate=16000,
|
65
64
|
resample=True,
|
66
|
-
num_workers=
|
65
|
+
num_workers=self.n_jobs,
|
67
66
|
verbose=True,
|
68
67
|
)
|
69
68
|
self.df = logits.process_index(self.data_df.index)
|
@@ -30,8 +30,7 @@ class AudmodelSet(Featureset):
|
|
30
30
|
if not os.path.isdir(model_root):
|
31
31
|
cache_root = audeer.mkdir("cache")
|
32
32
|
model_root = audeer.mkdir(model_root)
|
33
|
-
archive_path = audeer.download_url(
|
34
|
-
model_url, cache_root, verbose=True)
|
33
|
+
archive_path = audeer.download_url(model_url, cache_root, verbose=True)
|
35
34
|
audeer.extract_archive(archive_path, model_root)
|
36
35
|
cuda = "cuda" if torch.cuda.is_available() else "cpu"
|
37
36
|
device = self.util.config_val("MODEL", "device", cuda)
|
@@ -61,7 +60,7 @@ class AudmodelSet(Featureset):
|
|
61
60
|
},
|
62
61
|
sampling_rate=16000,
|
63
62
|
resample=True,
|
64
|
-
num_workers=
|
63
|
+
num_workers=self.n_jobs,
|
65
64
|
verbose=True,
|
66
65
|
)
|
67
66
|
self.df = hidden_states.process_index(self.data_df.index)
|
@@ -22,17 +22,15 @@ class Openxbow(Featureset):
|
|
22
22
|
self.feature_set = eval(f"opensmile.FeatureSet.{self.featset}")
|
23
23
|
store = self.util.get_path("store")
|
24
24
|
storage = f"{store}{self.name}_{self.featset}.pkl"
|
25
|
-
extract = self.util.config_val(
|
26
|
-
"FEATS", "needs_feature_extraction", False)
|
25
|
+
extract = self.util.config_val("FEATS", "needs_feature_extraction", False)
|
27
26
|
no_reuse = eval(self.util.config_val("FEATS", "no_reuse", "False"))
|
28
27
|
if extract or no_reuse or not os.path.isfile(storage):
|
29
28
|
# extract smile features first
|
30
|
-
self.util.debug(
|
31
|
-
"extracting openSmile features, this might take a while...")
|
29
|
+
self.util.debug("extracting openSmile features, this might take a while...")
|
32
30
|
smile = opensmile.Smile(
|
33
31
|
feature_set=self.feature_set,
|
34
32
|
feature_level=opensmile.FeatureLevel.LowLevelDescriptors,
|
35
|
-
num_workers=
|
33
|
+
num_workers=self.n_jobs,
|
36
34
|
)
|
37
35
|
if isinstance(self.data_df.index, pd.MultiIndex):
|
38
36
|
is_multi_index = True
|
@@ -51,13 +49,11 @@ class Openxbow(Featureset):
|
|
51
49
|
# save the smile features
|
52
50
|
smile_df.to_csv(lld_name, sep=";", header=False)
|
53
51
|
# get the path of the xbow java jar file
|
54
|
-
xbow_path = self.util.config_val(
|
55
|
-
"FEATS", "xbow.model", "openXBOW")
|
52
|
+
xbow_path = self.util.config_val("FEATS", "xbow.model", "openXBOW")
|
56
53
|
# check if JAR file exist
|
57
54
|
if not os.path.isfile(f"{xbow_path}/openXBOW.jar"):
|
58
55
|
# download using wget if not exist and locate in xbow_path
|
59
|
-
os.system(
|
60
|
-
f"git clone https://github.com/openXBOW/openXBOW")
|
56
|
+
os.system(f"git clone https://github.com/openXBOW/openXBOW")
|
61
57
|
# get the size of the codebook
|
62
58
|
size = self.util.config_val("FEATS", "size", 500)
|
63
59
|
# get the number of assignements
|
@@ -87,7 +83,7 @@ class Openxbow(Featureset):
|
|
87
83
|
smile = opensmile.Smile(
|
88
84
|
feature_set=opensmile.FeatureSet.eGeMAPSv02, # always use eGemaps for this
|
89
85
|
feature_level=opensmile.FeatureLevel.Functionals,
|
90
|
-
num_workers=
|
86
|
+
num_workers=self.n_jobs,
|
91
87
|
)
|
92
88
|
if isinstance(self.data_df.index, pd.MultiIndex):
|
93
89
|
is_multi_index = True
|
@@ -3,6 +3,7 @@ import ast
|
|
3
3
|
import pickle
|
4
4
|
import random
|
5
5
|
|
6
|
+
from joblib import parallel_backend
|
6
7
|
import numpy as np
|
7
8
|
import pandas as pd
|
8
9
|
from sklearn.model_selection import GridSearchCV
|
@@ -34,6 +35,7 @@ class Model:
|
|
34
35
|
self.epoch = 0
|
35
36
|
self.logo = self.util.config_val("MODEL", "logo", False)
|
36
37
|
self.xfoldx = self.util.config_val("MODEL", "k_fold_cross", False)
|
38
|
+
self.n_jobs = int(self.util.config_val("MODEL", "n_jobs", "8"))
|
37
39
|
|
38
40
|
def set_model_type(self, type):
|
39
41
|
self.model_type = type
|
@@ -75,7 +77,8 @@ class Model:
|
|
75
77
|
):
|
76
78
|
train_x = feats.iloc[train_index].to_numpy()
|
77
79
|
train_y = targets[train_index]
|
78
|
-
|
80
|
+
with parallel_backend("threading", n_jobs=self.n_jobs):
|
81
|
+
self.clf.fit(train_x, train_y)
|
79
82
|
truth_x = feats.iloc[test_index].to_numpy()
|
80
83
|
truth_y = targets[test_index]
|
81
84
|
predict_y = self.clf.predict(truth_x)
|
@@ -141,7 +144,8 @@ class Model:
|
|
141
144
|
):
|
142
145
|
train_x = feats.iloc[train_index].to_numpy()
|
143
146
|
train_y = targets.iloc[train_index]
|
144
|
-
|
147
|
+
with parallel_backend("threading", n_jobs=self.n_jobs):
|
148
|
+
self.clf.fit(train_x, train_y)
|
145
149
|
|
146
150
|
truth_x = feats.iloc[test_index].to_numpy()
|
147
151
|
truth_y = targets.iloc[test_index]
|
@@ -171,7 +175,7 @@ class Model:
|
|
171
175
|
)
|
172
176
|
|
173
177
|
def train(self):
|
174
|
-
"""Train the model"""
|
178
|
+
"""Train the model."""
|
175
179
|
# # first check if the model already has been trained
|
176
180
|
# if os.path.isfile(self.store_path):
|
177
181
|
# self.load(self.run, self.epoch)
|
@@ -204,22 +208,39 @@ class Model:
|
|
204
208
|
)
|
205
209
|
|
206
210
|
tuning_params = self.util.config_val("MODEL", "tuning_params", False)
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
self.clf
|
221
|
-
|
222
|
-
|
211
|
+
with parallel_backend("threading", n_jobs=self.n_jobs):
|
212
|
+
if tuning_params:
|
213
|
+
# tune the model meta parameters
|
214
|
+
tuning_params = ast.literal_eval(tuning_params)
|
215
|
+
tuned_params = {}
|
216
|
+
try:
|
217
|
+
scoring = glob_conf.config["MODEL"]["scoring"]
|
218
|
+
except KeyError:
|
219
|
+
self.util.error("got tuning params but no scoring")
|
220
|
+
for param in tuning_params:
|
221
|
+
values = ast.literal_eval(glob_conf.config["MODEL"][param])
|
222
|
+
tuned_params[param] = values
|
223
|
+
self.util.debug(f"tuning on {tuned_params}")
|
224
|
+
self.clf = GridSearchCV(
|
225
|
+
self.clf, tuned_params, refit=True, verbose=3, scoring=scoring
|
226
|
+
)
|
227
|
+
try:
|
228
|
+
class_weight = eval(
|
229
|
+
self.util.config_val("MODEL", "class_weight", "False")
|
230
|
+
)
|
231
|
+
if class_weight:
|
232
|
+
self.util.debug("using class weight")
|
233
|
+
self.clf.fit(
|
234
|
+
feats,
|
235
|
+
self.df_train[self.target],
|
236
|
+
sample_weight=self.classes_weights,
|
237
|
+
)
|
238
|
+
else:
|
239
|
+
self.clf.fit(feats, self.df_train[self.target])
|
240
|
+
except KeyError:
|
241
|
+
self.clf.fit(feats, self.df_train[self.target])
|
242
|
+
self.util.debug(f"winner parameters: {self.clf.best_params_}")
|
243
|
+
else:
|
223
244
|
class_weight = self.util.config_val("MODEL", "class_weight", False)
|
224
245
|
if class_weight:
|
225
246
|
self.util.debug("using class weight")
|
@@ -229,22 +250,8 @@ class Model:
|
|
229
250
|
sample_weight=self.classes_weights,
|
230
251
|
)
|
231
252
|
else:
|
232
|
-
|
233
|
-
|
234
|
-
self.clf.fit(feats, self.df_train[self.target])
|
235
|
-
self.util.debug(f"winner parameters: {self.clf.best_params_}")
|
236
|
-
else:
|
237
|
-
class_weight = self.util.config_val("MODEL", "class_weight", False)
|
238
|
-
if class_weight:
|
239
|
-
self.util.debug("using class weight")
|
240
|
-
self.clf.fit(
|
241
|
-
feats,
|
242
|
-
self.df_train[self.target],
|
243
|
-
sample_weight=self.classes_weights,
|
244
|
-
)
|
245
|
-
else:
|
246
|
-
labels = self.df_train[self.target]
|
247
|
-
self.clf.fit(feats, labels)
|
253
|
+
labels = self.df_train[self.target]
|
254
|
+
self.clf.fit(feats, labels)
|
248
255
|
|
249
256
|
def get_predictions(self):
|
250
257
|
# predictions = self.clf.predict(self.feats_test.to_numpy())
|
@@ -80,7 +80,7 @@ class CNNModel(Model):
|
|
80
80
|
# batch size
|
81
81
|
self.batch_size = int(self.util.config_val("MODEL", "batch_size", 8))
|
82
82
|
# number of parallel processes
|
83
|
-
self.num_workers =
|
83
|
+
self.num_workers = self.n_jobs
|
84
84
|
|
85
85
|
# set up the data_loaders
|
86
86
|
|
@@ -100,13 +100,13 @@ class CNNModel(Model):
|
|
100
100
|
train_set,
|
101
101
|
batch_size=self.batch_size,
|
102
102
|
shuffle=True,
|
103
|
-
num_workers=self.
|
103
|
+
num_workers=self.n_jobs,
|
104
104
|
)
|
105
105
|
self.testloader = torch.utils.data.DataLoader(
|
106
106
|
test_set,
|
107
107
|
batch_size=self.batch_size,
|
108
108
|
shuffle=False,
|
109
|
-
num_workers=self.
|
109
|
+
num_workers=self.n_jobs,
|
110
110
|
)
|
111
111
|
|
112
112
|
class Dataset_image(Dataset):
|
@@ -136,7 +136,7 @@ class CNNModel(Model):
|
|
136
136
|
test_set,
|
137
137
|
batch_size=self.batch_size,
|
138
138
|
shuffle=False,
|
139
|
-
num_workers=self.
|
139
|
+
num_workers=self.n_jobs,
|
140
140
|
)
|
141
141
|
|
142
142
|
def reset_test(self, df_test, feats_test):
|
@@ -71,7 +71,7 @@ class MLPModel(Model):
|
|
71
71
|
# batch size
|
72
72
|
self.batch_size = int(self.util.config_val("MODEL", "batch_size", 8))
|
73
73
|
# number of parallel processes
|
74
|
-
self.num_workers =
|
74
|
+
self.num_workers = self.n_jobs
|
75
75
|
if feats_train.isna().to_numpy().any():
|
76
76
|
self.util.debug(
|
77
77
|
f"Model, train: replacing {feats_train.isna().sum().sum()} NANs"
|
@@ -64,7 +64,7 @@ class MLP_Reg_model(Model):
|
|
64
64
|
# batch size
|
65
65
|
self.batch_size = int(self.util.config_val("MODEL", "batch_size", 8))
|
66
66
|
# number of parallel processes
|
67
|
-
self.num_workers =
|
67
|
+
self.num_workers = self.n_jobs
|
68
68
|
# set up the data_loaders
|
69
69
|
if feats_train.isna().to_numpy().any():
|
70
70
|
self.util.debug(
|
@@ -117,7 +117,7 @@ class MLP_Reg_model(Model):
|
|
117
117
|
dataset=data_set,
|
118
118
|
batch_size=self.batch_size,
|
119
119
|
shuffle=shuffle,
|
120
|
-
num_workers=self.
|
120
|
+
num_workers=self.n_jobs,
|
121
121
|
)
|
122
122
|
return loader
|
123
123
|
|
@@ -12,4 +12,6 @@ class Tree_model(Model):
|
|
12
12
|
def __init__(self, df_train, df_test, feats_train, feats_test):
|
13
13
|
super().__init__(df_train, df_test, feats_train, feats_test)
|
14
14
|
self.name = "tree"
|
15
|
-
self.clf = DecisionTreeClassifier(
|
15
|
+
self.clf = DecisionTreeClassifier(
|
16
|
+
random_state=42
|
17
|
+
) # set up the classifier
|
@@ -27,6 +27,7 @@ from sklearn.metrics import (
|
|
27
27
|
r2_score,
|
28
28
|
roc_auc_score,
|
29
29
|
roc_curve,
|
30
|
+
RocCurveDisplay,
|
30
31
|
)
|
31
32
|
|
32
33
|
import nkululeko.glob_conf as glob_conf
|
@@ -75,6 +76,7 @@ class Reporter:
|
|
75
76
|
self.result = Result(0, 0, 0, 0, "unknown")
|
76
77
|
self.run = run
|
77
78
|
self.epoch = epoch
|
79
|
+
self.model_type = self.util.get_model_type()
|
78
80
|
self._set_metric()
|
79
81
|
self.filenameadd = ""
|
80
82
|
self.cont_to_cat = False
|
@@ -387,6 +389,7 @@ class Reporter:
|
|
387
389
|
epoch = self.epoch
|
388
390
|
"""Print all evaluation values to text file."""
|
389
391
|
res_dir = self.util.get_path("res_dir")
|
392
|
+
fig_dir = self.util.get_path("fig_dir")
|
390
393
|
file_name = f"{res_dir}{self.util.get_exp_name()}_{epoch}{self.filenameadd}.txt"
|
391
394
|
if self.util.exp_is_classification():
|
392
395
|
labels = glob_conf.labels
|
@@ -397,6 +400,10 @@ class Reporter:
|
|
397
400
|
target_names=labels,
|
398
401
|
output_dict=True,
|
399
402
|
)
|
403
|
+
# print classifcation report in console
|
404
|
+
self.util.debug(
|
405
|
+
f"\n {classification_report(self.truths, self.preds, target_names=labels)}"
|
406
|
+
)
|
400
407
|
except ValueError as e:
|
401
408
|
self.util.debug(
|
402
409
|
"Reporter: caught a ValueError when trying to get"
|
@@ -415,6 +422,17 @@ class Reporter:
|
|
415
422
|
if len(np.unique(self.truths)) == 2:
|
416
423
|
fpr, tpr, _ = roc_curve(self.truths, self.preds)
|
417
424
|
auc_score = auc(fpr, tpr)
|
425
|
+
display = RocCurveDisplay(
|
426
|
+
fpr=fpr,
|
427
|
+
tpr=tpr,
|
428
|
+
roc_auc=auc_score,
|
429
|
+
estimator_name=f"{self.model_type} estimator",
|
430
|
+
)
|
431
|
+
# save plot
|
432
|
+
plot_path = f"{fig_dir}{self.util.get_exp_name()}_{epoch}{self.filenameadd}_roc.{self.format}"
|
433
|
+
display.plot(ax=None)
|
434
|
+
plt.savefig(plot_path)
|
435
|
+
self.util.debug(f"Saved ROC curve to {plot_path}")
|
418
436
|
pauc_score = roc_auc_score(self.truths, self.preds, max_fpr=0.1)
|
419
437
|
auc_pauc = f"auc: {auc_score:.3f}, pauc: {pauc_score:.3f} from epoch: {epoch}"
|
420
438
|
self.util.debug(auc_pauc)
|
@@ -27,6 +27,7 @@ class Util:
|
|
27
27
|
"pkl",
|
28
28
|
"eGeMAPSv02",
|
29
29
|
"functionals",
|
30
|
+
"n_jobs",
|
30
31
|
]
|
31
32
|
|
32
33
|
def __init__(self, caller=None, has_config=True):
|
@@ -150,7 +151,7 @@ class Util:
|
|
150
151
|
# self.logged_configs.clear()
|
151
152
|
|
152
153
|
def get_save_name(self):
|
153
|
-
"""Return a relative path to a name to save the experiment"""
|
154
|
+
"""Return a relative path to a name to save the experiment."""
|
154
155
|
store = self.get_path("store")
|
155
156
|
return f"{store}/{self.get_exp_name()}.pkl"
|
156
157
|
|
@@ -161,7 +162,7 @@ class Util:
|
|
161
162
|
return f"{store}/pred_{target}_{pred_name}.csv"
|
162
163
|
|
163
164
|
def is_categorical(self, pd_series):
|
164
|
-
"""Check if a dataframe column is categorical"""
|
165
|
+
"""Check if a dataframe column is categorical."""
|
165
166
|
return pd_series.dtype.name == "object" or isinstance(
|
166
167
|
pd_series.dtype, pd.CategoricalDtype
|
167
168
|
)
|
@@ -174,7 +175,7 @@ class Util:
|
|
174
175
|
"""Get the experiment directory."""
|
175
176
|
root = os.path.join(self.config["EXP"]["root"], "")
|
176
177
|
name = self.config["EXP"]["name"]
|
177
|
-
dir_name = f"{root}{name}"
|
178
|
+
dir_name = f"{root}/{name}"
|
178
179
|
audeer.mkdir(dir_name)
|
179
180
|
return dir_name
|
180
181
|
|
@@ -307,7 +308,7 @@ class Util:
|
|
307
308
|
self.config[section][key] = str(value)
|
308
309
|
|
309
310
|
def check_df(self, i, df):
|
310
|
-
"""Check a dataframe"""
|
311
|
+
"""Check a dataframe."""
|
311
312
|
print(f"check {i}: {df.shape}")
|
312
313
|
print(df.head(1))
|
313
314
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: nkululeko
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.89.0
|
4
4
|
Summary: Machine learning audio prediction experiments based on templates
|
5
5
|
Home-page: https://github.com/felixbur/nkululeko
|
6
6
|
Author: Felix Burkhardt
|
@@ -204,7 +204,7 @@ All of them take *--config <my_config.ini>* as an argument.
|
|
204
204
|
* *configurations*: which experiments to combine
|
205
205
|
* *--method* (optional): majority_voting, mean (default), max, sum, uncertainty, uncertainty_weighted, confidence_weighted, performance_weighted
|
206
206
|
* *--threshold*: uncertainty threshold (1.0 means no threshold)
|
207
|
-
* *--
|
207
|
+
* *--weights*: weights for performance_weighted method (could be from previous UAR, ACC)
|
208
208
|
* *--outfile* (optional): name of CSV file for output (default: ensemble_result.csv)
|
209
209
|
* *--no_labels* (optional): indicate that no ground truth is given
|
210
210
|
* **nkululeko.multidb**: do [multiple experiments](http://blog.syntheticspeech.de/2024/01/02/nkululeko-compare-several-databases/), comparing several databases cross and in itself
|
@@ -220,14 +220,11 @@ All of them take *--config <my_config.ini>* as an argument.
|
|
220
220
|
* **nkululeko.predict**: [predict features](http://blog.syntheticspeech.de/2023/08/16/nkululeko-how-to-predict-labels-for-your-data-from-existing-models-and-check-them/) like SNR, MOS, arousal/valence, age/gender, with DNN models
|
221
221
|
* **nkululeko.segment**: [segment a database](http://blog.syntheticspeech.de/2023/07/14/nkululeko-segmenting-a-database/) based on VAD (voice activity detection)
|
222
222
|
* **nkululeko.resample**: check on all [sampling rates and change](http://blog.syntheticspeech.de/2023/08/31/how-to-fix-different-sampling-rates-in-a-dataset-with-nkululeko/) to 16kHz
|
223
|
-
* **nkululeko.nkuluflag**: a convenient module to specify configuration parameters on the command-line.
|
224
|
-
* usage: nkuluflag.py [-h] [--config CONFIG] [--data [DATA ...]] [--label [LABEL ...]] [--tuning_params [TUNING_PARAMS ...]] [--layers [LAYERS ...]] [--model MODEL] [--feat FEAT] [--set SET]
|
225
|
-
[--with_os WITH_OS] [--target TARGET] [--epochs EPOCHS] [--runs RUNS] [--learning_rate LEARNING_RATE] [--drop DROP]
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
223
|
+
* **nkululeko.nkuluflag**: a convenient module to specify configuration parameters on the command-line. Usage:
|
230
224
|
|
225
|
+
```bash
|
226
|
+
$ python -m nkululeko.nkuluflag.py [-h] [--config CONFIG] [--data [DATA ...]] [--label [LABEL ...]] [--tuning_params [TUNING_PARAMS ...]] [--layers [LAYERS ...]] [--model MODEL] [--feat FEAT] [--set SET] [--with_os WITH_OS] [--target TARGET] [--epochs EPOCHS] [--runs RUNS] [--learning_rate LEARNING_RATE] [--drop DROP]
|
227
|
+
```
|
231
228
|
|
232
229
|
There's my [blog](http://blog.syntheticspeech.de/?s=nkululeko) with tutorials:
|
233
230
|
* [Introduction](http://blog.syntheticspeech.de/2021/08/04/machine-learning-experiment-framework/)
|
@@ -359,6 +356,16 @@ F. Burkhardt, Johannes Wagner, Hagen Wierstorf, Florian Eyben and Björn Schulle
|
|
359
356
|
Changelog
|
360
357
|
=========
|
361
358
|
|
359
|
+
Version 0.89.0
|
360
|
+
--------------
|
361
|
+
* added Roc plots and classification report on Debug
|
362
|
+
|
363
|
+
|
364
|
+
Version 0.88.12
|
365
|
+
---------------
|
366
|
+
* added n_jobs for sklearn processing
|
367
|
+
* re_named num_workers n_jobs
|
368
|
+
|
362
369
|
Version 0.88.11
|
363
370
|
--------------
|
364
371
|
* removed hack in Praat script
|
@@ -828,9 +835,9 @@ Version 0.66.3
|
|
828
835
|
|
829
836
|
Version 0.66.2
|
830
837
|
--------------
|
831
|
-
* enabled data-
|
838
|
+
* enabled data-pacthes with quotes
|
832
839
|
* enabled missing category labels
|
833
|
-
* used
|
840
|
+
* used tqdm for progress display
|
834
841
|
|
835
842
|
Version 0.66.1
|
836
843
|
--------------
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|