Beispiel #1
0
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]]))
Beispiel #2
0
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]]))