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
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)
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)
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)
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")
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 = {}
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]))