def predict(seq_model,
            core_input_shape=5,
            withOffset=False,
            fromFile='testData',
            files=[0]):
    musList, recList, matchesMapList, songNames, matchValue, potentialMatchesMapList = util.parseMatchedInput(
        fromFile, files)
    musList, recList = util.normalizeTimes(musList, recList)
    recList, matchesMapList = util.trim(recList, matchesMapList)
    if withOffset:
        recList = util.addOffsets(musList, recList, matchesMapList)
    songPredictions = []
    for i in range(len(musList)):
        x, y = util.dataAsWindow([musList[i]], [recList[i]],
                                 [matchesMapList[i]])
        x_test = x.astype('float32')
        mus_x_test, rec_x_test, core_test_features = util.splitData(x_test)
        mus_x_test, rec_x_test, core_test_features = mus_x_test.astype(
            'float32'), rec_x_test.astype(
                'float32'), core_test_features.astype('float32')
        songPredictions.append(
            predict_on_song(seq_model, core_input_shape, mus_x_test,
                            rec_x_test, core_test_features, [musList[i]],
                            [recList[i]], [matchesMapList[i]], i))
    return songPredictions
예제 #2
0
def construct_dataset():
    n_files = 9
    for_predict = False
    is_ml = False

    musList, recList, matchesMapList, songNames, matchValue, potentialMatchesMapList = util.parseMatchedInput(
        'C://Users//cpgaf//PycharmProjects//ExpressiveAI//javaOutput/javaOutput',
        range(0, n_files))
    musList, recList = util.normalizeTimes(musList, recList)
    musList, recList = util.normalizeIndices(musList, recList)

    x_raw_list = []
    x_list = []
    y_list = []
    obs_list = []
    for songIndex in range(len(matchesMapList)):
        x_raw_i, x_i, y_i, n_obs = util.assemble_matching_data_for(
            songIndex, musList, recList, potentialMatchesMapList,
            matchesMapList, for_predict, is_ml)
        x_raw_list.append(x_raw_i)
        x_list.append(x_i)
        y_list.append(y_i)
        obs_list.append(n_obs)

    x_raw = np.zeros(
        (sum(obs_list), 2 * util.TIMESTEPS + 1, 2 * util.N_MATCHING_FEATURES))
    x = np.zeros((sum(obs_list), util.N_ML_FEATURES))
    y = np.zeros(sum(obs_list))

    start = 0
    for i in range(len(x_list)):
        end = start + obs_list[i]
        x_raw[start:end] = x_raw_list[i]
        x[start:end] = x_list[i]
        y[start:end] = y_list[i]
        start = end

    print(x_raw[0])
    print(y[0])
    print('\n')
    print(x_raw[1])
    print(y[1])
    print('\n')
    print(x_raw[2])
    print(y[2])
    print('\n')
    print(x_raw[3])
    print(y[3])
    print('\n')
    print(x_raw[4])
    print(y[4])
    print('\n')

    np.save('../data/x_train', x_raw)
    np.save('../data/x_train_ml', x)
    np.save('../data/y_train', y)
예제 #3
0
def predict(model):
    musList, recList, matchesMapList, songNames = util.parseMatchedInput(
        'testData', [0])
    musList, recList = util.normalizeTimes(musList, recList)
    recList, matchesMapList = util.trim(recList, matchesMapList)
    recList = util.addOffsets(musList, recList, matchesMapList)
    for i in range(len(musList)):
        x, y = util.dataAsWindowTwoSided([musList[i]], [recList[i]],
                                         [matchesMapList[i]])
        x_test = x.astype('float32')
        x_test = util.splitDataTwoSided(x_test, only_mus=True)
        x_test = x_test.astype('float32')
        predict_on_song_only_mus(model, x_test, [musList[i]], [recList[i]],
                                 [matchesMapList[i]], i)
예제 #4
0
def main():
    simplified = False

    musList, recList, matchesMapList = util.parseMatchedInput('javaOutput.txt')
    musList, recList = util.normalizeTimes(musList, recList)
    x, y = util.dataAsWindow(musList, recList, matchesMapList, simplified=simplified)

    x_train = x
    y_train = y
    print(x_train[:5])
    print(y_train[:5])

    model = Sequential()

    init = TruncatedNormal(mean=0.0, stddev=0.05, seed=None)
    input_dim = util.NON_SPARSE_FEATURES if not simplified else util.SIMPLIFIED_FEATURES
    output = util.NON_SPARSE_FEATURES * 10
    model.add(Dense(output, activation='relu', input_dim=input_dim, kernel_initializer=init))
    model.add(Dropout(0.4))
    '''model.add(Dense(output, activation='relu', kernel_initializer=init))
    if not simplified:
        output = 2 * util.TIMESTEPS + 1
        model.add(Dense(output, activation='relu', kernel_initializer=init))
    model.add(Dropout(0.5))'''
    model.add(Dense(1, activation='linear'))

    early_stopping = EarlyStopping(monitor='loss', patience=10)
    model.compile(loss='mean_squared_error', optimizer='adam', metrics=[])
    N_EPOCHS = 30
    model.fit(x_train, y_train, batch_size=BATCH_SIZE, epochs=N_EPOCHS,
              callbacks=[], shuffle=True)

    if not simplified:
        model.save('simple_nn_model.h5')
    else:
        model.save('simple_nn_model_simple.h5')

    predict.predict(model, simplified=simplified)
예제 #5
0
def main():
    musList, recList, matchesMapList = util.parseMatchedInput('javaOutput.txt')
    musList, recList = util.normalizeTimes(musList, recList)
    x, y = util.dataAsWindow(musList, recList, matchesMapList, verySimple=True)

    x_train = x
    y_train = y

    model = Sequential()

    input_dim = util.V_SIMPLE_FEATURES
    model.add(Dense(1, activation='linear', input_dim=input_dim))
    model.compile(loss='mean_squared_error', optimizer='adam', metrics=[])
    N_EPOCHS = 50
    model.fit(x_train,
              y_train,
              batch_size=BATCH_SIZE,
              epochs=N_EPOCHS,
              callbacks=[],
              shuffle=True)

    model.save('very_simple_nn_model.h5')

    predict.predict(model, verySimple=True)
def main():
    musList, recList, matchesMapList, songNames = util.parseMatchedInput(
        'javaOutput', 8)
    musList, recList = util.normalizeTimes(musList, recList)
    recList, matchesMapList = util.trim(recList, matchesMapList)
    x, y = util.dataAsWindow(musList, recList, matchesMapList)
    x_train = x.astype('float32')
    y_train = y.astype('float32')
    mus_train, rec_train, core_train = util.splitData(x_train)
    mus_train, rec_train, core_train = mus_train.astype(
        'float32'), rec_train.astype('float32'), core_train.astype('float32')

    ################
    isSeq = False  ##
    ################

    mus_train, rec_train, core_train, y_train = util.splitSeqChord(
        mus_train, rec_train, core_train, y_train, isSeq)

    model = train_model(mus_train, rec_train, core_train, y_train)
    if isSeq:
        model.save("enhanced_nn_model_seq.h5")
    else:
        model.save("enhanced_nn_model_chord.h5")
예제 #7
0
def main():
    n_files = 1
    musList, recList, matchesMapList, songNames, matchValue, potentialMatchesMapList = util.parseMatchedInput(
        '../javaOutput/javaOutput', range(0, n_files))
    musList, recList = util.normalizeTimes(musList, recList)

    print(p_util.relativeNoteDurations)
    for s in range(1):
        rec = recList[s]
        p_util.preprocess(rec)
        name = songNames[s]
        print('\n')
        print(name)
        pool = Pool(3)

        var_results = []
        for i in range(p_util.n_samples):
            print('processing sample {}'.format(i))
            var_results.append(
                pool.apply_async(runUntilConvergence,
                                 (rec, p_util.songSpecificNoteDurations,
                                  p_util.durationPatterns)))

        var_samples = []
        for result in var_results:
            var_samples.append(result.get())

        bestAssign = p_util.findMaxWeight(var_samples, rec,
                                          p_util.durationPatterns)
        mus = p_util.inferMus(rec, bestAssign)
        file = "C://Users//cpgaf//PycharmProjects//ExpressiveAI//inferredMus//inferred" + str(
            s) + ".txt"
        with open(file, 'w') as of:
            for note in mus:
                of.write(util.printNote(note) + '\n')
        p_util.durationPatterns = {}
예제 #8
0
def predict(model, simplified=False, verySimple=False):
    musList, recList, matchesMapList = util.parseMatchedInput('testData.txt')
    assert (len(musList) == 1)
    assert (len(recList) == 1)
    musList, recList = util.normalizeTimes(musList, recList)
    x_test, initial_predictions, musNoteIndices = util.dataAsWindowForPredict(musList[0], recList[0], matchesMapList[0],
                                                                              simplified=simplified, verySimple=verySimple)
    print(x_test)
    predictions = []
    for pred in initial_predictions:
        predictions.append(pred[0])
    prev_predictions = initial_predictions
    for i in range(len(x_test)):
        correspondingMusIndex = musNoteIndices[i]
        if correspondingMusIndex not in matchesMapList[0].keys():
            continue
        index = 0
        for j in range(0, len(x_test[i]), 2):
            if x_test[i][j] == -1:
                x_test[i][j] = prev_predictions[index][0]
                x_test[i][j + 1] = prev_predictions[index][1]
                index += 1
        if i > 995 and i < 1005:
            print("prev predictions")
            print(prev_predictions)
            print("x test at i")
            print(x_test[i])
        pred = model.predict_on_batch(np.reshape(x_test[i], (1, len(x_test[i]))))
        predictions.append(pred[0][0])
        print("Prediction:" + str(pred))
        if i < 1000:
            pred = recList[0][matchesMapList[0][correspondingMusIndex]]['start_normal']
        else:
            pred = pred[0][0]
        prev_predictions = prev_predictions[1:]
        note_len = musList[0][correspondingMusIndex]['end_normal'] - musList[0][correspondingMusIndex]['start_normal']
        prev_predictions.append((pred, pred + note_len))

    actual = []
    for musNote in musList[0]:
        musIndex = musNote['index']
        if musIndex in matchesMapList[0].keys():
            recNote = recList[0][matchesMapList[0][musIndex]]
            actual.append(recNote['start_normal'])

    predictions = np.reshape(np.asarray(predictions), (len(predictions), 1))

    print(predictions)
    plt.plot(actual)
    plt.plot(predictions)
    print()
    print(np.mean(np.square(np.asarray(actual[:len(actual) - (len(actual) - len(predictions))]) - np.asarray(predictions))))
    print(K.get_value(K.mean(K.square(np.asarray(actual[:len(actual) - (len(actual) - len(predictions))]) - np.asarray(predictions)),axis=-1)))
    plt.show()

    predictions = util.denormalizeTimes(predictions, recList[0][-1]['end'])

    print('lengths: x_test = {}, predictions = {}, mus = {}'.format(len(x_test), len(predictions), len(musList[0])))
    file = "C:\\Users\\cpgaffney1\\Documents\\NetBeansProjects\\ProjectMusic\\files\\predictions.txt"
    with open(file, 'w') as of:
        for i in range(len(predictions)):
            of.write("{},{}\n".format(i, predictions[i][0]))