/
2DConvModel_Tests.py
67 lines (60 loc) · 3.54 KB
/
2DConvModel_Tests.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from feat_extract import *
from ml import *
extract = False
train = True
load = False
hop_length = 4096
n_fft = 8192
n_mfcc = 10
poolSize = 10
k = 24
numSegmentTypes = 6
maxSegmentListLength = 15
epochs = 20
modelName = "Faded2DConvModel"
if extract:
songMetadataIndexerModule = SongMetadataIndexerModule()
mfccDimIndexerModule = MFCCDimensionsIndexerModule(hop_length, n_mfcc)
indexerModulesList = [songMetadataIndexerModule, mfccDimIndexerModule]
indexer = Indexer("wavs", indexerModulesList)
mfccFeature = MFCCFeature("mfcc_input_1", "wavs", hop_length=hop_length, n_fft=n_fft, n_mfcc=n_mfcc)
segmentOrderFeature = SegmentOrderFeature("segment_order_input_1", "annotations", numSegmentTypes, maxSegmentListLength)
featureList = []
featureList.append(mfccFeature)
featureList.append(segmentOrderFeature)
annot = AnnotatedSongLabeler("annotations", sample_rate=22050, hop_length=hop_length)
saveTrainingData("features", featureList, indexer, annot)
if train:
model = Faded2DConvModel(modelName)
if not load:
model.build(numClasses=numSegmentTypes, inputShapeList=[(26,10),(104,10),(208,10),(208,10),(208,10),(208,10),(208,10)],
inputConvFilterNumList=[256, 128, 128, 128, 128, 128, 64],
inputConvKernelSizeList=[8,8,8,8,8,8,8], convMaxPoolSizeList=[None, 2, 4, 4, 8, 8, 8],
convDenseSizeList=[None,150,100,100,80,80,60],
postConvDropout=0.35, preRNNDropout=0.5, rNNUnitsList=[100,100], rnnDropoutList=[0.5,0.5],
postRNNDropout=0.5)
model.summary()
modulesList =[]
chunkedMFCCDataGeneratorModuleNear = ChunkedMFCCDataGeneratorModule("features", "mfcc_input_1", 26, 13)
chunkedMFCCDataGeneratorModuleMid = ChunkedMFCCDataGeneratorModule("features", "mfcc_input_1", 104, 13)
chunkedMFCCDataGeneratorModuleFar = ChunkedMFCCDataGeneratorModule("features", "mfcc_input_1", 208, 13)
delayed2DDataGeneratorModuleMid = Delayed2DDataGeneratorModule(chunkedMFCCDataGeneratorModuleMid, 2)
delayed2DDataGeneratorModuleFar = Delayed2DDataGeneratorModule(chunkedMFCCDataGeneratorModuleFar, 10)
delayed2DDataGeneratorModuleVeryFar = Delayed2DDataGeneratorModule(chunkedMFCCDataGeneratorModuleFar, 26)
delayed2DDataGeneratorModuleVeryVeryFar = Delayed2DDataGeneratorModule(chunkedMFCCDataGeneratorModuleFar, 42)
delayed2DDataGeneratorModuleSuperFar = Delayed2DDataGeneratorModule(chunkedMFCCDataGeneratorModuleFar, 58)
delayed2DDataGeneratorModuleSuperDuperFar = Delayed2DDataGeneratorModule(chunkedMFCCDataGeneratorModuleFar, 74)
modulesList.append(chunkedMFCCDataGeneratorModuleNear)
modulesList.append(delayed2DDataGeneratorModuleMid)
modulesList.append(delayed2DDataGeneratorModuleFar)
modulesList.append(delayed2DDataGeneratorModuleVeryFar)
modulesList.append(delayed2DDataGeneratorModuleVeryVeryFar)
modulesList.append(delayed2DDataGeneratorModuleSuperFar)
modulesList.append(delayed2DDataGeneratorModuleSuperDuperFar)
generatorLabeler = GeneratorLabeler2D("annotations", 22050, hop_length, 13)
modularDataGenerator = ModularDataGenerator("features", "labels", modulesList, generatorLabeler, samplesShapeIndex=0, outputExtraDim=True)
evaluator = ModelEvaluator(modularDataGenerator)
if load:
evaluator.trainWithSavedKFoldEval(modelName, epochs, generatorLabeler=generatorLabeler, saveBestOnly=False, outputExtraDim=True)
else:
evaluator.trainWithKFoldEval(model=model, k=k, modelName=modelName, epochs=epochs, saveBestOnly=False, outputExtraDim=True)