From 08a1e5e831fe25c9eceb15d4068718e569e8af85 Mon Sep 17 00:00:00 2001 From: Mart Lubbers Date: Fri, 26 May 2017 21:09:56 +0200 Subject: [PATCH] add results and finish up --- experiments.py | 75 ++++++++++++++++++++++++-------------- log.txt | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 147 insertions(+), 27 deletions(-) create mode 100644 log.txt diff --git a/experiments.py b/experiments.py index 354f787..833e1c5 100644 --- a/experiments.py +++ b/experiments.py @@ -10,13 +10,14 @@ import numpy as np # keras from keras.models import Sequential -from keras.layers import Dense, Dropout # , Activation +from keras.layers import Dense # , Dropout # , Activation from keras import backend, utils # Testset ratio testset = 0.10 samplerate = 16000 -verbosity = 1 +verbosity = 0 + def get_datafiles(): files = glob.glob(os.path.join(os.getcwd(), 'textgrid', '*.TextGrid')) @@ -25,9 +26,11 @@ def get_datafiles(): num = re.match('^.*/(\\d+).TextGrid$', tg).group(1) yield (tg, 'wav/{:02d}.wav'.format(int(num)), int(num)) + def label_from_annotation(ann): return 0 if ann.strip() == '' else 1 + def features_from_wav(tg, wavp, typ='mfcc', winlen=0.025, winstep=0.01): # Load textgrid tgob = pympi.TextGrid(tg) @@ -39,7 +42,8 @@ def features_from_wav(tg, wavp, typ='mfcc', winlen=0.025, winstep=0.01): data = mfcc(sig, rate, winlen=winlen, winstep=winstep, numcep=13, appendEnergy=True) elif typ == 'fbank': - (data, energy) = logfbank(sig, rate, winlen=winlen, winstep=winstep, nfilt=26) + (data, energy) = logfbank( + sig, rate, winlen=winlen, winstep=winstep, nfilt=26) else: raise ValueError("No such type") @@ -62,6 +66,7 @@ def features_from_wav(tg, wavp, typ='mfcc', winlen=0.025, winstep=0.01): i += 1 return (data, labels) + def singerfun(num, l): if l == 1: if 0 <= num <= 11: @@ -75,6 +80,7 @@ def singerfun(num, l): else: return 0 + def run(typ, winlen, winstep, modelfun, modelname, multiclass=False): datas = [] labels = [] @@ -88,14 +94,12 @@ def run(typ, winlen, winstep, modelfun, modelname, multiclass=False): else: labels.append(l) - datas = np.concatenate(datas) labels = np.concatenate(labels) print(np.unique(labels, return_counts=True)) if multiclass: labels = utils.to_categorical(labels, num_classes=4) - rng_state = np.random.get_state() np.random.shuffle(datas) np.random.set_state(rng_state) @@ -108,48 +112,65 @@ def run(typ, winlen, winstep, modelfun, modelname, multiclass=False): model = modelfun(traindata) - #Train + # Train model.fit(traindata, trainlabels, epochs=10, batch_size=32, shuffle=False, verbose=verbosity) - #Test + # Test loss, acc = model.evaluate(testdata, testlabels, batch_size=32, verbose=verbosity) print('{}\t{}\t{}\t{}\t{}\n'.format( winlen, winstep, modelname, loss, acc)) return model -def bottlemodel(d): - model = Sequential() - model.add(Dense(13, activation='relu', input_shape=(d.shape[1],))) - model.add(Dense(1, activation='sigmoid')) + +def bottlemodel(layers): + def fun(d): + model = Sequential() + model.add(Dense(layers, activation='relu', input_shape=(d.shape[1],))) + model.add(Dense(1, activation='sigmoid')) # model.add( # Dense(d.shape[1]*2, input_shape=(d.shape[1],), activation='relu')) # model.add(Dense(13, activation='relu')) # model.add(Dense(1, activation='sigmoid')) - model.compile(optimizer='rmsprop', - loss='binary_crossentropy', - metrics=['accuracy']) - return model - -def multimodel(d): - model = Sequential() -# model.add(Dense(d.shape[1]*2, input_shape=(d.shape[1],), activation='relu')) - model.add(Dense(13, activation='relu', input_shape=(d.shape[1],))) - model.add(Dense(4, activation='softmax')) - model.compile(optimizer='rmsprop', - loss='categorical_crossentropy', - metrics=['accuracy']) - return model - + model.compile(optimizer='rmsprop', + loss='binary_crossentropy', + metrics=['accuracy']) + return model + return fun + + +def multimodel(layers): + def fun(d): + model = Sequential() +# model.add(Dense(d.shape[1]*2, input_shape=(d.shape[1],), activation='relu')) + model.add(Dense(layers, activation='relu', input_shape=(d.shape[1],))) + model.add(Dense(4, activation='softmax')) + model.compile(optimizer='rmsprop', + loss='categorical_crossentropy', + metrics=['accuracy']) + return model + return fun + + +models = [ + ('bottle3', bottlemodel(3), False), + ('bottle5', bottlemodel(5), False), + ('bottle8', bottlemodel(8), False), + ('bottle13', bottlemodel(13), False), + ('multi3', multimodel(3), True), + ('multi5', multimodel(5), True), + ('multi8', multimodel(8), True), + ('multi13', multimodel(13), True)] if __name__ == '__main__': print('winlen\twinstep\tmodel\tloss\taccuracy\n') with backend.get_session(): for winlen, winstep in ((0.025, 0.01), (0.1, 0.04), (0.2, 0.08)): - for name, model, multi in reversed((('bottle', bottlemodel, False), ('multi', multimodel, True))): + for name, model, multi in models: m = run('mfcc', winlen, winstep, model, name, multi) fproot = 'model_{}_{}_{}'.format(winlen, winstep, name) + print(fproot); with open('{}.json'.format(fproot), 'w') as f: f.write(m.to_json()) m.save_weights('{}.hdf5'.format(fproot)) diff --git a/log.txt b/log.txt new file mode 100644 index 0000000..a67f009 --- /dev/null +++ b/log.txt @@ -0,0 +1,99 @@ +winlen winstep model loss accuracy + +(array([0, 1]), array([476266, 325691])) +0.025 0.01 bottle3 0.3389156284828169 0.8597792879855353 + +model_0.025_0.01_bottle3 +(array([0, 1]), array([476266, 325691])) +0.025 0.01 bottle5 0.30842042285169746 0.874156742939086 + +model_0.025_0.01_bottle5 +(array([0, 1]), array([476266, 325691])) +0.025 0.01 bottle8 0.2965808613601041 0.8830849803611148 + +model_0.025_0.01_bottle8 +(array([0, 1]), array([476266, 325691])) +0.025 0.01 bottle13 0.28287798926393115 0.889955732901797 + +model_0.025_0.01_bottle13 +(array([0, 1, 2, 3]), array([476266, 125684, 151977, 48030])) +0.025 0.01 multi3 0.48447136703078025 0.8319970072947191 + +model_0.025_0.01_multi3 +(array([0, 1, 2, 3]), array([476266, 125684, 151977, 48030])) +0.025 0.01 multi5 0.43238697158434836 0.8497038468739897 + +model_0.025_0.01_multi5 +(array([0, 1, 2, 3]), array([476266, 125684, 151977, 48030])) +0.025 0.01 multi8 0.4072758802538003 0.8624353139223143 + +model_0.025_0.01_multi8 +(array([0, 1, 2, 3]), array([476266, 125684, 151977, 48030])) +0.025 0.01 multi13 0.3707011521600716 0.868520481326766 + +model_0.025_0.01_multi13 +(array([0, 1]), array([119037, 81431])) +0.1 0.04 bottle3 0.32152209714074387 0.8698992317728829 + +model_0.1_0.04_bottle3 +(array([0, 1]), array([119037, 81431])) +0.1 0.04 bottle5 0.29785478306865665 0.879028235071257 + +model_0.1_0.04_bottle5 +(array([0, 1]), array([119037, 81431])) +0.1 0.04 bottle8 0.31144997012195363 0.8783797266109135 + +model_0.1_0.04_bottle8 +(array([0, 1]), array([119037, 81431])) +0.1 0.04 bottle13 0.28727721201615886 0.8858126309547645 + +model_0.1_0.04_bottle13 +(array([0, 1, 2, 3]), array([119037, 31435, 37996, 12000])) +0.1 0.04 multi3 0.47640502210221436 0.824603412157997 + +model_0.1_0.04_multi3 +(array([0, 1, 2, 3]), array([119037, 31435, 37996, 12000])) +0.1 0.04 multi5 0.44105214603370885 0.8400678439588946 + +model_0.1_0.04_multi5 +(array([0, 1, 2, 3]), array([119037, 31435, 37996, 12000])) +0.1 0.04 multi8 0.3903473072779056 0.8636635737803053 + +model_0.1_0.04_multi8 +(array([0, 1, 2, 3]), array([119037, 31435, 37996, 12000])) +0.1 0.04 multi13 0.3752127004474934 0.8698493464852026 + +model_0.1_0.04_multi13 +(array([0, 1]), array([59493, 40723])) +0.2 0.08 bottle3 0.35470913447088 0.847719788444267 + +model_0.2_0.08_bottle3 +(array([0, 1]), array([59493, 40723])) +0.2 0.08 bottle5 0.32276059763122966 0.870272427901407 + +model_0.2_0.08_bottle5 +(array([0, 1]), array([59493, 40723])) +0.2 0.08 bottle8 0.2949916362783269 0.8849416225925556 + +model_0.2_0.08_bottle8 +(array([0, 1]), array([59493, 40723])) +0.2 0.08 bottle13 0.3005677448865742 0.8803512623490669 + +model_0.2_0.08_bottle13 +(array([0, 1, 2, 3]), array([59493, 15726, 18993, 6004])) +0.2 0.08 multi3 0.4804011737202328 0.8227721784312548 + +model_0.2_0.08_multi3 +(array([0, 1, 2, 3]), array([59493, 15726, 18993, 6004])) +0.2 0.08 multi5 0.4430828566863061 0.8434287995210059 + +model_0.2_0.08_multi5 +(array([0, 1, 2, 3]), array([59493, 15726, 18993, 6004])) +0.2 0.08 multi8 0.39796411239295504 0.8585969464244296 + +model_0.2_0.08_multi8 +(array([0, 1, 2, 3]), array([59493, 15726, 18993, 6004])) +0.2 0.08 multi13 0.391048318939632 0.8592954794930646 + +model_0.2_0.08_multi13 + -- 2.20.1