nkululeko 0.59.1__py3-none-any.whl → 0.61.0__py3-none-any.whl

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.
Files changed (64) hide show
  1. nkululeko/constants.py +1 -1
  2. nkululeko/experiment.py +43 -43
  3. nkululeko/feature_extractor.py +101 -58
  4. nkululeko/modelrunner.py +14 -14
  5. nkululeko/plots.py +11 -0
  6. nkululeko/segment.py +23 -27
  7. nkululeko/test_predictor.py +1 -1
  8. {nkululeko-0.59.1.dist-info → nkululeko-0.61.0.dist-info}/METADATA +13 -1
  9. nkululeko-0.61.0.dist-info/RECORD +31 -0
  10. {nkululeko-0.59.1.dist-info → nkululeko-0.61.0.dist-info}/WHEEL +1 -1
  11. nkululeko/ap_age.py +0 -31
  12. nkululeko/ap_arousal.py +0 -30
  13. nkululeko/ap_dominance.py +0 -29
  14. nkululeko/ap_gender.py +0 -29
  15. nkululeko/ap_mos.py +0 -35
  16. nkululeko/ap_pesq.py +0 -35
  17. nkululeko/ap_sdr.py +0 -36
  18. nkululeko/ap_snr.py +0 -35
  19. nkululeko/ap_stoi.py +0 -34
  20. nkululeko/ap_valence.py +0 -30
  21. nkululeko/augmenter.py +0 -64
  22. nkululeko/dataset.py +0 -415
  23. nkululeko/dataset_csv.py +0 -49
  24. nkululeko/dataset_ravdess.py +0 -19
  25. nkululeko/estimate_snr.py +0 -89
  26. nkululeko/feats_agender.py +0 -63
  27. nkululeko/feats_agender_agender.py +0 -65
  28. nkululeko/feats_analyser.py +0 -87
  29. nkululeko/feats_audmodel.py +0 -63
  30. nkululeko/feats_audmodel_dim.py +0 -63
  31. nkululeko/feats_clap.py +0 -74
  32. nkululeko/feats_import.py +0 -44
  33. nkululeko/feats_mld.py +0 -47
  34. nkululeko/feats_mos.py +0 -92
  35. nkululeko/feats_opensmile.py +0 -84
  36. nkululeko/feats_oxbow.py +0 -87
  37. nkululeko/feats_praat.py +0 -72
  38. nkululeko/feats_snr.py +0 -63
  39. nkululeko/feats_squim.py +0 -99
  40. nkululeko/feats_trill.py +0 -74
  41. nkululeko/feats_wav2vec2.py +0 -94
  42. nkululeko/featureset.py +0 -41
  43. nkululeko/feinberg_praat.py +0 -430
  44. nkululeko/loss_ccc.py +0 -28
  45. nkululeko/loss_softf1loss.py +0 -40
  46. nkululeko/model.py +0 -256
  47. nkululeko/model_bayes.py +0 -14
  48. nkululeko/model_cnn.py +0 -118
  49. nkululeko/model_gmm.py +0 -16
  50. nkululeko/model_knn.py +0 -16
  51. nkululeko/model_knn_reg.py +0 -16
  52. nkululeko/model_mlp.py +0 -175
  53. nkululeko/model_mlp_regression.py +0 -197
  54. nkululeko/model_svm.py +0 -18
  55. nkululeko/model_svr.py +0 -18
  56. nkululeko/model_tree.py +0 -14
  57. nkululeko/model_tree_reg.py +0 -14
  58. nkululeko/model_xgb.py +0 -12
  59. nkululeko/model_xgr.py +0 -12
  60. nkululeko/randomsplicer.py +0 -76
  61. nkululeko/randomsplicing.py +0 -74
  62. nkululeko-0.59.1.dist-info/RECORD +0 -82
  63. {nkululeko-0.59.1.dist-info → nkululeko-0.61.0.dist-info}/LICENSE +0 -0
  64. {nkululeko-0.59.1.dist-info → nkululeko-0.61.0.dist-info}/top_level.txt +0 -0
@@ -1,197 +0,0 @@
1
- # model_mlp.py
2
- from nkululeko.util import Util
3
- import nkululeko.glob_conf as glob_conf
4
- from nkululeko.model import Model
5
- from nkululeko.reporter import Reporter
6
- import torch
7
- import ast
8
- import numpy as np
9
- from sklearn.metrics import mean_squared_error
10
- from collections import OrderedDict
11
- from nkululeko.loss_ccc import ConcordanceCorCoeff
12
- import os
13
-
14
- class MLP_Reg_model(Model):
15
- """MLP = multi layer perceptron"""
16
-
17
- is_classifier = False
18
-
19
- def __init__(self, df_train, df_test, feats_train, feats_test):
20
- """Constructor taking the configuration and all dataframes"""
21
- super().__init__(df_train, df_test, feats_train, feats_test)
22
- self.target = glob_conf.config['DATA']['target']
23
- labels = ast.literal_eval(glob_conf.config['DATA']['labels'])
24
- self.class_num = len(labels)
25
- # set up loss criterion
26
- criterion = self.util.config_val('MODEL', 'loss', 'mse')
27
- if criterion == 'mse':
28
- self.criterion = torch.nn.MSELoss()
29
- elif criterion == '1-ccc':
30
- self.criterion = ConcordanceCorCoeff()
31
- else:
32
- self.util.error(f'unknown loss function: {criterion}')
33
- self.util.debug(f'training model with {criterion} loss function')
34
- # set up the model
35
- self.device = self.util.config_val('MODEL', 'device', 'cpu')
36
- layers_string = glob_conf.config['MODEL']['layers']
37
- self.util.debug(f'using layers {layers_string}')
38
- layers = ast.literal_eval(layers_string)
39
- drop = self.util.config_val('MODEL', 'drop', False)
40
- if drop:
41
- self.util.debug(f'training with dropout: {drop}')
42
- self.model = self.MLP(feats_train.shape[1], layers, 1, drop).to(self.device)
43
- self.learning_rate = float(self.util.config_val('MODEL', 'learning_rate', 0.0001))
44
- # set up regularization
45
- self.optimizer = torch.optim.Adam(self.model.parameters(), lr=self.learning_rate)
46
- # batch size
47
- self.batch_size = int(self.util.config_val('MODEL', 'batch_size', 8))
48
- # number of parallel processes
49
- self.num_workers = int(self.util.config_val('MODEL', 'num_workers', 5))
50
- # set up the data_loaders
51
- if feats_train.isna().to_numpy().any():
52
- self.util.debug(f'Model, train: replacing {feats_train.isna().sum().sum()} NANs with 0')
53
- feats_train = feats_train.fillna(0)
54
- if feats_test.isna().to_numpy().any():
55
- self.util.debug(f'Model, test: replacing {feats_test.isna().sum().sum()} NANs with 0')
56
- feats_test = feats_test.fillna(0)
57
- self.trainloader = self.get_loader(feats_train, df_train, True)
58
- self.testloader = self.get_loader(feats_test, df_test, False)
59
-
60
- def set_testdata(self, data_df, feats_df):
61
- self.testloader = self.get_loader(feats_df, data_df, False)
62
-
63
- def train(self):
64
- loss = self.train_epoch(self.model, self.trainloader, self.device, self.optimizer, self.criterion)
65
- return loss
66
-
67
- def predict(self):
68
- _, truths, predictions = self.evaluate_model(self.model, self.testloader, self.device)
69
- result, _, _ = self.evaluate_model(self.model, self.trainloader, self.device)
70
- report = Reporter(truths.numpy(), predictions.numpy(), self.run, self.epoch)
71
- try:
72
- report.result.loss = self.loss
73
- except AttributeError: # if the model was loaded from disk the loss is unknown
74
- pass
75
- report.result.train = result
76
- return report
77
-
78
- def get_loader(self, df_x, df_y, shuffle):
79
- data_set = self.Dataset(df_y, df_x, self.target)
80
- loader = torch.utils.data.DataLoader(
81
- dataset=data_set,
82
- batch_size=self.batch_size,
83
- shuffle=shuffle,
84
- num_workers=self.num_workers
85
- )
86
- return loader
87
-
88
- class Dataset(torch.utils.data.Dataset):
89
- def __init__(self, df, features,
90
- label: str):
91
- super().__init__()
92
- self.df = df
93
- self.df_features = features
94
- self.label = label
95
- def __len__(self):
96
- return len(self.df)
97
-
98
- def __getitem__(self, item):
99
- index = self.df.index[item]
100
- features = self.df_features.loc[index, :].values.astype('float32').squeeze()
101
- labels = np.array([self.df.loc[index, self.label]]).astype('float32').squeeze()
102
- return features, labels
103
-
104
-
105
- class MLP(torch.nn.Module):
106
- def __init__(self, i, layers, o, drop):
107
- super().__init__()
108
- sorted_layers = sorted(layers.items(), key=lambda x: x[1])
109
- layers = OrderedDict()
110
- layers['0'] = torch.nn.Linear(i, sorted_layers[0][1])
111
- layers['0_r'] = torch.nn.ReLU()
112
- for i in range(0, len(sorted_layers)-1):
113
- layers[str(i+1)] = torch.nn.Linear(sorted_layers[i][1], sorted_layers[i+1][1])
114
- if drop:
115
- layers[str(i)+'_d'] = torch.nn.Dropout(float(drop))
116
- layers[str(i)+'_r'] = torch.nn.ReLU()
117
- layers[str(len(sorted_layers)+1)] = torch.nn.Linear(sorted_layers[-1][1], o)
118
- self.linear = torch.nn.Sequential(layers)
119
- def forward(self, x):
120
- # x: (batch_size, channels, samples)
121
- x = x.squeeze(dim=1).float()
122
- return self.linear(x)
123
-
124
-
125
- def train_epoch(self, model, loader, device, optimizer, criterion):
126
- # first check if the model already has been trained
127
- # if os.path.isfile(self.store_path):
128
- # self.load(self.run, self.epoch)
129
- # self.util.debug(f'reusing model: {self.store_path}')
130
- # return
131
- self.model.train()
132
- losses = []
133
- for features, labels in loader:
134
- logits = model(features.to(device)).reshape(-1)
135
- loss = criterion(logits, labels.to(device))
136
- #print(f'loss: {loss.item()}')
137
- losses.append(loss.item())
138
- optimizer.zero_grad()
139
- loss.backward()
140
- optimizer.step()
141
- self.loss = (np.asarray(losses)).mean()
142
-
143
- def evaluate_model(self, model, loader, device):
144
- logits = torch.zeros(len(loader.dataset))
145
- targets = torch.zeros(len(loader.dataset))
146
- model.eval()
147
- with torch.no_grad():
148
- for index, (features, labels) in enumerate(loader):
149
- start_index = index * loader.batch_size
150
- end_index = (index + 1) * loader.batch_size
151
- if end_index > len(loader.dataset):
152
- end_index = len(loader.dataset)
153
- logits[start_index:end_index] = model(features.to(device)).reshape(-1)
154
- targets[start_index:end_index] = labels
155
-
156
- predictions = logits
157
- measure = self.util.config_val('MODEL', 'measure', 'mse')
158
- if measure == 'mse':
159
- result = mean_squared_error(targets.numpy(), predictions.numpy())
160
- elif measure == 'ccc':
161
- result = Reporter.ccc(targets.numpy(), predictions.numpy())
162
- else:
163
- self.util.error(f'unknown measure: {measure}')
164
- return result, targets, predictions
165
-
166
- def store(self):
167
- torch.save(self.model.state_dict(), self.store_path)
168
-
169
- def load(self, run, epoch):
170
- self.set_id(run, epoch)
171
- dir = self.util.get_path('model_dir')
172
- name = f'{self.util.get_exp_name(only_train=True)}_{run}_{epoch:03d}.model'
173
- self.store_path = dir+name
174
- self.device = self.util.config_val('MODEL', 'device', 'cpu')
175
- layers = ast.literal_eval(glob_conf.config['MODEL']['layers'])
176
- drop = self.util.config_val('MODEL', 'drop', False)
177
- if drop:
178
- self.util.debug(f'training with dropout: {drop}')
179
- self.model = self.MLP(self.feats_train.shape[1], layers, 1, drop).to(self.device)
180
- self.model.load_state_dict(torch.load(dir+name))
181
- self.model.eval()
182
-
183
- def load_path(self, path, run, epoch):
184
- self.set_id(run, epoch)
185
- with open(path, 'rb') as handle:
186
- self.device = self.util.config_val('MODEL', 'device', 'cpu')
187
- layers = ast.literal_eval(glob_conf.config['MODEL']['layers'])
188
- self.store_path = path
189
- drop = self.util.config_val('MODEL', 'drop', False)
190
- if drop:
191
- self.util.debug(f'training with dropout: {drop}')
192
- self.model = self.MLP(self.feats_train.shape[1], layers, self.class_num, drop).to(self.device)
193
- self.model.load_state_dict(torch.load(self.store_path))
194
- self.model.eval()
195
- def predict_sample(self, features):
196
- """Predict one sample"""
197
- self.util.error('model_mlp_regression: predicting one sample not implemented yet')
nkululeko/model_svm.py DELETED
@@ -1,18 +0,0 @@
1
- # model_svm.py
2
-
3
- from sklearn import svm
4
- from nkululeko.model import Model
5
-
6
- class SVM_model(Model):
7
- """An SVM model"""
8
-
9
- is_classifier = True
10
-
11
- def __init__(self, df_train, df_test, feats_train, feats_test):
12
- super().__init__(df_train, df_test, feats_train, feats_test)
13
- c = float(self.util.config_val('MODEL', 'C_val', '0.001'))
14
- self.clf = svm.SVC(kernel='linear', C=c, gamma='auto') # set up the classifier
15
-
16
- def set_C(self, c):
17
- """Set the C parameter"""
18
- self.clf.C = c
nkululeko/model_svr.py DELETED
@@ -1,18 +0,0 @@
1
- # svrmodel.py
2
-
3
- from sklearn import svm
4
- from nkululeko.model import Model
5
-
6
- class SVR_model(Model):
7
- """An SVR model"""
8
-
9
- is_classifier = False
10
-
11
- def __init__(self, df_train, df_test, feats_train, feats_test):
12
- super().__init__(df_train, df_test, feats_train, feats_test)
13
- c = float(self.util.config_val('MODEL', 'C_val', '0.001'))
14
- self.clf = svm.SVR(kernel='rbf', C=c) # set up the classifier
15
-
16
- def set_C(self, c):
17
- """Set the C parameter"""
18
- self.clf.C = c
nkululeko/model_tree.py DELETED
@@ -1,14 +0,0 @@
1
- # model_tree.py
2
-
3
- from sklearn.tree import DecisionTreeClassifier
4
- from nkululeko.model import Model
5
-
6
- class Tree_model(Model):
7
- """An Tree model"""
8
-
9
- is_classifier = True
10
-
11
- def __init__(self, df_train, df_test, feats_train, feats_test):
12
- super().__init__(df_train, df_test, feats_train, feats_test)
13
- self.clf = DecisionTreeClassifier() # set up the classifier
14
-
@@ -1,14 +0,0 @@
1
- # model_tree_reg.py
2
-
3
- from sklearn.tree import DecisionTreeRegressor
4
- from nkululeko.model import Model
5
-
6
- class Tree_reg_model(Model):
7
-
8
- is_classifier = False
9
-
10
- """An Tree model"""
11
- def __init__(self, df_train, df_test, feats_train, feats_test):
12
- super().__init__(df_train, df_test, feats_train, feats_test)
13
- self.clf = DecisionTreeRegressor() # set up the classifier
14
-
nkululeko/model_xgb.py DELETED
@@ -1,12 +0,0 @@
1
- # xgbmodel.py
2
-
3
- from xgboost import XGBClassifier
4
- from nkululeko.model import Model
5
-
6
- class XGB_model(Model):
7
- """An XGBoost model"""
8
-
9
- is_classifier = True
10
-
11
- clf = XGBClassifier(use_label_encoder=False) # set up the classifier
12
-
nkululeko/model_xgr.py DELETED
@@ -1,12 +0,0 @@
1
- # xgrmodel.py
2
-
3
- from xgboost.sklearn import XGBRegressor
4
- from nkululeko.model import Model
5
-
6
- class XGR_model(Model):
7
- """An XGBoost model"""
8
-
9
- is_classifier = False
10
-
11
- clf = XGBRegressor(use_label_encoder=False) # set up the regressor
12
-
@@ -1,76 +0,0 @@
1
- # randomsplicer.py
2
-
3
- """
4
- Code originally by Oliver Pauly
5
-
6
- Based on an idea by Klaus Scherer
7
-
8
- K. R. Scherer, “Randomized splicing: A note on a simple technique for masking speech content”
9
- Journal of Experimental Research in Personality, vol. 5, pp. 155–159, 1971.
10
-
11
- Evaluated in:
12
- F. Burkhardt, Anna Derington, Matthias Kahlau, Klaus Scherer, Florian Eyben and Björn Schuller: Masking Speech Contents by Random Splicing: is Emotional Expression Preserved?, Proc. ICASSP, 2023
13
-
14
- """
15
-
16
- import pandas as pd
17
- from nkululeko.util import Util
18
- import nkululeko.randomsplicing as rsp
19
- import numpy as np
20
- import audiofile as af
21
- import os
22
- from audformat.utils import map_file_path
23
- import audeer
24
-
25
- class Randomsplicer:
26
- """
27
- augmenting the train split
28
- """
29
- def __init__(self, df):
30
- self.df = df
31
- self.util = Util('randomsplicer')
32
-
33
- def changepath(self, fp, np):
34
- fullpath = os.path.dirname(fp)
35
- return fp.replace(fullpath, np)
36
-
37
- def run(self, sample_selection):
38
- """
39
- random splice the selected samples and return a dataframe with new files index.
40
- adjustable parameters:
41
- * p_reverse: probability of some samples to be in reverse order (default: 0.3)
42
- * top_db: top db level for silence to be recognized (default: 12)
43
- """
44
-
45
- p_reverse=0.3
46
- top_db=12
47
-
48
- files = self.df.index.get_level_values(0).values
49
- store = self.util.get_path('store')
50
- filepath = f'{store}randomspliced/'
51
- audeer.mkdir(filepath)
52
- self.util.debug(f'random splicing {sample_selection} samples to {filepath}')
53
- newpath = ''
54
- for i, f in enumerate(files):
55
- signal, sr = af.read(f)
56
- filename = os.path.basename(f)
57
- parent = os.path.dirname(f).split('/')[-1]
58
- sig_new = rsp.random_splicing(
59
- signal, sr,
60
- p_reverse=p_reverse,
61
- top_db=top_db,
62
- )
63
-
64
- newpath = f'{filepath}/{parent}/'
65
- audeer.mkdir(newpath)
66
- af.write(f'{newpath}{filename}', signal=sig_new, sampling_rate=sr)
67
- if i%10==0:
68
- print(f'random spliced {i} of {len(files)}')
69
- df_ret = self.df.copy()
70
- df_ret = df_ret.set_index(map_file_path(df_ret.index, lambda x: self.changepath(x, newpath)))
71
- db_filename = self.util.config_val('DATA', 'random_splice_result', 'random_spliced.csv')
72
- target = self.util.config_val('DATA', 'target', 'emotion')
73
- df_ret[target] = df_ret['class_label']
74
- df_ret = df_ret.drop(columns=['class_label'])
75
- df_ret.to_csv(db_filename)
76
- return df_ret
@@ -1,74 +0,0 @@
1
- """
2
- Code originally by Oliver Pauly
3
-
4
- Based on an idea by Klaus Scherer
5
-
6
- K. R. Scherer, “Randomized splicing: A note on a simple technique for masking speech content”
7
- Journal of Experimental Research in Personality, vol. 5, pp. 155–159, 1971.
8
-
9
- Evaluated in:
10
- F. Burkhardt, Anna Derington, Matthias Kahlau, Klaus Scherer, Florian Eyben and Björn Schuller: Masking Speech Contents by Random Splicing: is Emotional Expression Preserved?, Proc. ICASSP, 2023
11
-
12
- """
13
- import numpy as np
14
- import librosa
15
- import audiofile as af
16
-
17
- def random_splicing(
18
- signal, sr,
19
- p_reverse=0.0,
20
- top_db=12,
21
- ):
22
- """
23
- randomly splice the signal and re-arrange.
24
-
25
- p_reverse: probability of some samples to be in reverse order
26
- top_db: top db level for silence to be recognized
27
-
28
- """
29
- signal /= np.max(abs(signal))
30
-
31
- indices = split_wav_naive(signal, top_db=top_db)
32
-
33
- np.random.shuffle(indices)
34
-
35
- wav_spliced = remix_random_reverse(signal, indices, p_reverse=p_reverse)
36
-
37
- return wav_spliced
38
-
39
-
40
- def split_wav_naive(wav, top_db=12):
41
-
42
- indices = librosa.effects.split(wav, top_db=top_db)
43
-
44
- indices = np.array(indices)
45
- # (re)add the silence-segments
46
- indices = indices.repeat(2)[1:-1].reshape((-1, 2))
47
- # add first segment
48
- indices = np.vstack(((0, indices[0][0]), indices))
49
- # add last segment
50
- indices = np.vstack((indices, [indices[-1][-1], wav.shape[0]]))
51
-
52
- return indices
53
-
54
-
55
- def remix_random_reverse(wav, indices, p_reverse=0):
56
-
57
- import random
58
-
59
- wav_remix = []
60
-
61
- for seg in indices:
62
-
63
- start = seg[0]
64
- end = seg[1]
65
- wav_seg = wav[start:end]
66
-
67
- if np.random.rand(1)[0] <= p_reverse:
68
- wav_seg = wav_seg[::-1]
69
-
70
- wav_remix.append(wav_seg)
71
-
72
- wav_remix = np.hstack(wav_remix)
73
-
74
- return wav_remix
@@ -1,82 +0,0 @@
1
- nkululeko/__init__.py,sha256=62f8HiEzJ8rG2QlTFJXUCMpvuH3fKI33DoJSj33mscc,63
2
- nkululeko/ap_age.py,sha256=ZpWtNpfqseK2JwD2ZeRXdEtXm9EKmaeYwdQ-r-e0FcM,1054
3
- nkululeko/ap_arousal.py,sha256=mYVHBdX4wmAjEZ9DvKBiVONJuDiiGN0Zn8HintV6OUQ,997
4
- nkululeko/ap_dominance.py,sha256=gwsQ8OMSTgY9oG26L9wk4qfgGjR_gyo66yiDNQ9PY5I,1006
5
- nkululeko/ap_gender.py,sha256=MfySaQNQEpV9GZCJm1vas_SIcXrCh7O5Q4X6AXVcQDE,983
6
- nkululeko/ap_mos.py,sha256=GByXFm4IpHDyxUHqF5hmqnZbX4LfdH2quHjxzcrlzg0,1079
7
- nkululeko/ap_pesq.py,sha256=5qKMnisQOrKiKqB_G2--KULoDPvyBKiJ69LIBmAnlTo,1112
8
- nkululeko/ap_sdr.py,sha256=eclDh9wzXYDiuqy5deIRB_h16wBnJ_J438UyZEC4Ejo,1160
9
- nkululeko/ap_snr.py,sha256=X5Pnl9PDOw-w1cJSmzKaPtCMEiQhko6pWd0YAGeGYjQ,1082
10
- nkululeko/ap_stoi.py,sha256=sx2KSGSjCsjgUvZPFlKALhbZlVg2aTdGmvil-iNSqVk,1157
11
- nkululeko/ap_valence.py,sha256=cyFrKRy68EU5gDiVg0_HxiwaKGbAJ9UuwuiXgVTalAU,997
12
- nkululeko/augment.py,sha256=ebv5QebGD8wLzXInvusjn4kFlET6-yXkYoF132BrubQ,1750
13
- nkululeko/augmenter.py,sha256=nOJPb7Ut4wLlEcla1JaUiLntksrZqfvq1mFOCexpT7Y,2584
14
- nkululeko/balancer.py,sha256=64ftZN68sMDfkvuovCDHpAHmSJgCO6Kdk9bwmpSisec,12
15
- nkululeko/cacheddataset.py,sha256=bSJ_SDg7TxL89YL_pJXp-sFvdUXJtHuBTd5KSTE4AkQ,955
16
- nkululeko/constants.py,sha256=BqCvUlzgpeRIc5r6IurUVStV5rCCTTLE18mSY_9KmDM,18
17
- nkululeko/dataset.py,sha256=pI4UYyR-H5ZeZBGXZqIOh1vGzPvzfp6yQx_cpQ-JIn8,20458
18
- nkululeko/dataset_csv.py,sha256=vsefSiAz_zodxoatvpX_H7l9GFdA8jDeRcRZX8yl4Vw,2120
19
- nkululeko/dataset_ravdess.py,sha256=pTt98sr4_egdUCv2fWepkZTlkQ6x3A2YshO_n302DNg,537
20
- nkululeko/demo.py,sha256=nGP3fUDXuW1ZF12AzMpzRWXct0rdqYRJVNgA9B_QWwA,1821
21
- nkululeko/demo_predictor.py,sha256=VVxE2lf5lTkAP5qElG5U2bK6SdDzQ2Jmf0Vn_yHpSro,2302
22
- nkululeko/estimate_snr.py,sha256=m3JZSRGXr2M9yVgovTSZ63rpho9hIUfHOXfAVRAHf1k,4186
23
- nkululeko/experiment.py,sha256=x_JACYeR1-OQtVi8sUTBPYTX8ONk2s6l51CVYgGn_hc,24872
24
- nkululeko/explore.py,sha256=aemOk5XYw7axQEJQfdABEUxN3img0NYSb8l6W-nDzZY,2090
25
- nkululeko/feats_agender.py,sha256=46DmyXVHKL7wH77j1W82ualUmPic93t8OAIL5q_yMXI,2750
26
- nkululeko/feats_agender_agender.py,sha256=Vwt3fynWHwmTMJtHu5ltDQhtW_VO3ImKqwGMNoxhIyI,2832
27
- nkululeko/feats_analyser.py,sha256=u11ZvuoKFqytGi1TNGEhnagLplNXX-wvqmB5Cb_tUIY,3837
28
- nkululeko/feats_audmodel.py,sha256=B1u4BMftKYHbtzf8kIAx2uQzzVcqpVJGIuH3S1hjU_c,2750
29
- nkululeko/feats_audmodel_dim.py,sha256=Pd_LXvjJTGb3MAuXiFo0_50BABJnm3IdxUVkRYLEY6c,2741
30
- nkululeko/feats_clap.py,sha256=CHOkNzdMNK5vDld69EsBeBTkyxn_hY1d3LyU2lO3mR0,3250
31
- nkululeko/feats_import.py,sha256=Gm-svzwNY8Qvdv91VjgjmAudroAi32v2gCC56USJtKA,2045
32
- nkululeko/feats_mld.py,sha256=6ErExKzDpfwoLwzBBNMeIZ2G5D2ovHA7UvKRqVdF-bo,1909
33
- nkululeko/feats_mos.py,sha256=xp51EWetc7d4pMrUP3z0j_9hErDNLMo5GetNDiItOMA,3887
34
- nkululeko/feats_opensmile.py,sha256=bp5f3iDzvw3XgB458dFHwqLuCL_WbZk8FOx41CWzyo0,3812
35
- nkululeko/feats_oxbow.py,sha256=lZLPXcUk7IcexM3O5kw-ekkYodfXE6QpS2QSHU1D6F8,4425
36
- nkululeko/feats_praat.py,sha256=BbjgpIO-dJ2GuVxQdaTtu8rRuaJ0dmFm9F3g_z_5SCA,3024
37
- nkululeko/feats_snr.py,sha256=BOhO0kDxyfnSTLA6gxSYilNkRGiXhamShZJNron8Z6g,2605
38
- nkululeko/feats_squim.py,sha256=9dzKVyuoN-VVetlFqs62BsV4xjrCQK-wtQ6Mek-NB3M,4029
39
- nkululeko/feats_trill.py,sha256=dydoLTVZnWeps_Ur0xWNhGdAw3PxA9yFCg6exTi2zhs,2934
40
- nkululeko/feats_wav2vec2.py,sha256=S63QmTiGlyEalO4HjacAh9KxOAVO80vZntG-Alk91WU,4005
41
- nkululeko/feature_extractor.py,sha256=AxPqhXFU9o42g6BGkjVWK7ZOXyKiTW8NJ6_QbT-dTPA,5115
42
- nkululeko/featureset.py,sha256=8zYafHU_nDYV89AukfNobltCxBuoIvvRIGEXPm0PCI0,1331
43
- nkululeko/feinberg_praat.py,sha256=fUrdVo1aJNitdG1L0sZRfIvGMJJdQwG3BXoAV5xjh5o,19472
44
- nkululeko/file_checker.py,sha256=Nw05SIp7Ez1U9ZeFhNGz0XivwKr43hHg1WsfzKsrFPQ,3510
45
- nkululeko/filter_data.py,sha256=g7giEShbA-dr2ekVycW5WurFG-UaopJvDZWylKNZtpM,6717
46
- nkululeko/glob_conf.py,sha256=2Tl0NZQeVeydDO8T2tuJC2lCv99wvaTVRX9Dy1Mq_L4,237
47
- nkululeko/loss_ccc.py,sha256=BM2I6j_rjKlpua5gKbo81EAS3hhZK-ClBTqJHot9Ils,939
48
- nkululeko/loss_softf1loss.py,sha256=OPBH-HvHf6saZ9-W85qhi4hH6jj2E-wwKq2Jt_el8pI,1329
49
- nkululeko/model.py,sha256=wh8wd_5_Nk2y8onNrAA59AxGCoupLD6piVMKEXuYHco,10594
50
- nkululeko/model_bayes.py,sha256=C7MdZqsHVXGbL6pfTuLClOherhiWtxa61dtptEyDrxY,432
51
- nkululeko/model_cnn.py,sha256=vMGpNfsVYWddwAEjWtTwY9gPg1Ji_B_skvBFa4ZWe8U,5029
52
- nkululeko/model_gmm.py,sha256=2544Gwu-9swNJuJ7ah9-2ZUyXZvVqx_k2h8iDS6Ry4Q,603
53
- nkululeko/model_knn.py,sha256=2jNPK_GcA0bYxUfnDQ2ZapApvewS72j5-IOsu9sC3eo,544
54
- nkululeko/model_knn_reg.py,sha256=jF62r0M9lGx2tbvGHwoPGk4c8ex5j2hxKAT_1Kx3IBo,551
55
- nkululeko/model_mlp.py,sha256=QZomFOUKIuyg7aSBX23rNWWgthRuZ5c3yEBSilstCpw,7976
56
- nkululeko/model_mlp_regression.py,sha256=K_5_DSBiJqxuIBJMvhKAYkyEZN98w6X8co0RtZUBNYI,8750
57
- nkululeko/model_svm.py,sha256=eESHYUjIgNnx5hH4AgOXERImXA-eTjVaE2Fqkrlcjzk,522
58
- nkululeko/model_svr.py,sha256=hDF7TTNQOCp9uaA1d45bCnXZOrkyFC-IcVc4FLxkCbw,505
59
- nkululeko/model_tree.py,sha256=mskYf83CeaIUg6OdZINBVLtzWTJqMOB26wn-GRmG748,382
60
- nkululeko/model_tree_reg.py,sha256=0Eouaw7BHxdMMGPEBTr9-ZoU9CBU0unaPWgGH7glvvo,389
61
- nkululeko/model_xgb.py,sha256=Gd0piVg-7r4e3JNVhpLB6DcTibZGjIHo0ct1Ve6A97U,236
62
- nkululeko/model_xgr.py,sha256=rOJ3QZjTLIpxHh6GqyCo-ewG9IUL35Fd-0jRDNuM_bk,242
63
- nkululeko/modelrunner.py,sha256=IKvPcrvJS0voUfoFAyNAGlEhONZVb70ZEBH79hwWh_I,5380
64
- nkululeko/nkululeko.py,sha256=O2Zw7u-Mb7VP9MPxAlhdTkXV2lW2kETIuSJp7mfj_Tc,1671
65
- nkululeko/plots.py,sha256=rr4Fa0kckRNw5-mz9clikiB5ul8XJ9U4_1OebCUiNWw,10924
66
- nkululeko/predict.py,sha256=3ei4wn2by0p9Vkv7cllMcszmEjSM2vX0T6x_5rlgT28,1851
67
- nkululeko/randomsplicer.py,sha256=ZILsLHabKWbBB14l2UT9d0-b4lyuHkvvl9osHklbsoY,2674
68
- nkululeko/randomsplicing.py,sha256=MOLwxFTM0omsVBmKAN82PmGkD4zNnxwDYoWS4WQnuVU,1867
69
- nkululeko/reporter.py,sha256=359aeQWt0ZGLseaJnOfafYG8BrwumiM2Q58DWiaoyWQ,10177
70
- nkululeko/result.py,sha256=Ey5FPsAyfnQVtzO_J6_4hkOAZ191YWmF_vXxlgNjCdc,406
71
- nkululeko/runmanager.py,sha256=ll04dEu5Y1nOi8QOtmSiw3oxzcXeASdQsg0t-vxCny8,6765
72
- nkululeko/scaler.py,sha256=6NQHbSQZO9HIfhYNlliuDRywjaEH_FVKHRskTJ2xr90,3021
73
- nkululeko/segment.py,sha256=xmkZrA3iEsro7vaBwWdey_pIleS1tYyjTFe-EfMUQHQ,4399
74
- nkululeko/syllable_nuclei.py,sha256=vK9dj5deqRnyEmlZmhFtKPzqKVGNCgTnWaG8UDITKNg,9913
75
- nkululeko/test.py,sha256=BbHGliDChAXqMe2oA579dJpyZSlPGAm5997lX_POboQ,1372
76
- nkululeko/test_predictor.py,sha256=7hbUhF09YqI7ixMp3gtVVnAO3prLF3J5tHH9mv125pM,2405
77
- nkululeko/util.py,sha256=gZrNTF4C7hKkEMCC_hoNkEAhAViWzWebP8LsHRew7s4,9731
78
- nkululeko-0.59.1.dist-info/LICENSE,sha256=0zGP5B_W35yAcGfHPS18Q2B8UhvLRY3dQq1MhpsJU_U,1076
79
- nkululeko-0.59.1.dist-info/METADATA,sha256=GczosYJcXJGLfEajloeb8Xm05z6K5-cSFOyqE0Prhmc,21494
80
- nkululeko-0.59.1.dist-info/WHEEL,sha256=5sUXSg9e4bi7lTLOHcm6QEYwO5TIF1TNbTSVFVjcJcc,92
81
- nkululeko-0.59.1.dist-info/top_level.txt,sha256=DPFNNSHPjUeVKj44dVANAjuVGRCC3MusJ08lc2a8xFA,10
82
- nkululeko-0.59.1.dist-info/RECORD,,