def main(model_name, exp_name='fma'): """ DO the work! """ assert model_name in ['crnn', 'lstm', 'lstm_bi'] print("-" * 60) print("Keunwoo: Welcome! Lets do something deep with Jamendo dataset.") print(" I'm assuming you finished pre-processing.") print(" We're gonna use {} model".format(model_name)) print("It's a good practice to use callbacks in Keras.") callbacks = my_callbacks.get_callbacks(name=exp_name) early_stopper, model_saver, weight_saver, csv_logger = callbacks # just to show you print("Preparing data generators for training and validation...") train_batch_size = 40 valid_batch_size = 5 steps_per_epoch = 30 gen_train = data_gen('train', SR * 10, is_shuffle=True, is_infinite=True, batch_size=train_batch_size) gen_valid = data_gen('valid', SR * 10, is_shuffle=False, is_infinite=True, batch_size=valid_batch_size) print("Keunwoo: Getting model...") if model_name == 'crnn': model = models_time_varying.model_convrnn(n_out=2) elif model_name == 'lstm': model = models_time_varying.model_lstm_leglaive_icassp2014(n_out=2, bidirectional=False) elif model_name == 'lstm_bi' model = models_time_varying.model_lstm_leglaive_icassp2014(n_out=2, bidirectional=True) model.compile('adam', 'categorical_crossentropy', metrics=['accuracy']) print("Keunwoo: Starting to train...") model.fit_generator(gen_train, steps_per_epoch, epochs=30, callbacks=callbacks, validation_data=gen_valid, validation_steps=N_DATA['valid'] // valid_batch_size) print("Keunwoo: Training is done. Loading the best weights...") model.load_weights("{}_best_weights.h5".format(exp_name)) gen_test = data_gen('test', None, is_shuffle=False, is_infinite=True, batch_size=1) print(" Evaluating...") scores = model.evaluate_generator(gen_test, N_DATA['test']) print('Keunwoo: Done for {}!'.format(model_name)) print(" test set loss:{}".format(scores[0])) print(" test set accuracy: {}%".format([scores[1]]))
def main(model_name, exp_name='fma'): """ DO it! """ assert model_name in ['multi_kernel', 'crnn', 'cnn3x3', 'cnn1d'] print("-" * 60) print("Keunwoo: Welcome! Lets do something deep with FMA dataset.") print(" I'm assuming you finished pre-processing.") print(" We're gonna use {} model".format(model_name)) csv_path = os.path.join(DIR_FMA_CSV, 'tracks.csv') tracks = pd.read_csv(csv_path, index_col=0, header=[0, 1]) small = tracks['set', 'subset'] == 'small' training = (tracks['set', 'split'] == 'training') & small validation = (tracks['set', 'split'] == 'validation') & small test = (tracks['set', 'split'] == 'test') & small print("Keunwoo: We're loading and modifying label values.") enc = LabelEncoder() y_train = enc.fit_transform(tracks[training]['track', 'genre_top']) y_valid = enc.transform(tracks[validation]['track', 'genre_top']) y_test = enc.transform(tracks[test]['track', 'genre_top']) y_train = np.eye(8)[y_train] y_valid = np.eye(8)[y_valid] y_test = np.eye(8)[y_test] print("It's a good practice to use callbacks in Keras.") callbacks = my_callbacks.get_callbacks(name=exp_name) early_stopper, model_saver, weight_saver, csv_logger = callbacks print("Preparing data generators for training and validation...") batch_size = 40 steps_per_epoch = len(y_train) // batch_size gen_train = data_gen(tracks[training], y_train, True, batch_size=batch_size) gen_valid = data_gen(tracks[validation], y_valid, False, batch_size=batch_size) print("Keunwoo: Getting model...") if model_name == 'multi_kernel': model = models_time_invariant.model_multi_kernel_shape(n_out=8) elif model_name == 'crnn': model = models_time_invariant.model_crnn_icassp2017_choi(n_out=8) elif model_name == 'cnn3x3': model = models_time_invariant.model_conv3x3_ismir2016_choi(n_out=8) elif model_name == 'cnn1d': model = models_time_invariant.model_conv1d_icassp2014_sander(n_out=8) model.compile('adam', 'categorical_crossentropy', metrics=['accuracy']) print("Keunwoo: Starting to train...") model.fit_generator(gen_train, steps_per_epoch, epochs=5, callbacks=callbacks, validation_data=gen_valid, validation_steps=len(y_valid) // batch_size) print("Keunwoo: Training is done. Loading the best weights...") model.load_weights("{}_best_weights.h5".format(exp_name)) gen_test = data_gen(tracks[test], y_test, False, batch_size=batch_size) print(" Evaluating...") scores = model.evaluate_generator(gen_test, len(y_test) // batch_size) print('Keunwoo: Done for {}!'.format(model_name)) print(" test set loss:{}".format(scores[0])) print(" test set accuracy: {}%".format([scores[1]]))