(back to
KeyFinder page index)
For each piece in the test set, the
KeyFinder driver program outputs the predicted key from each algorithm followed by the actual key. As discussed we can run things twice, each time dividing the data in half in the opposite way. The last number in the command line signifies the desired number of hidden layers; we leave it at 1 for reasons to be treated shortly.
C:\Code\cps271\keyfinder\Debug>keyfinder chords-training.dat chords-test.dat 1
ScaleFinder C A
TheoryFinder A A
MLPChordFinder E A
MLPCircleFinder F# A
MLPFreqFinder E A
ScaleFinder C# D#
TheoryFinder D# D#
MLPChordFinder E D#
MLPCircleFinder F# D#
MLPFreqFinder G# D#
ScaleFinder C# G#
TheoryFinder G# G#
MLPChordFinder E G#
MLPCircleFinder F# G#
MLPFreqFinder G# G#
ScaleFinder C D
TheoryFinder D D
MLPChordFinder E D
MLPCircleFinder F# D
MLPFreqFinder D D
C:\Code\cps271\keyfinder\Debug>keyfinder chords-test.dat chords-training.dat 1
ScaleFinder C# F
TheoryFinder F F
MLPChordFinder F# F
MLPCircleFinder F# F
MLPFreqFinder B F
ScaleFinder C C
TheoryFinder C C
MLPChordFinder F# C
MLPCircleFinder F# C
MLPFreqFinder C C
ScaleFinder C# G#
TheoryFinder G# G#
MLPChordFinder F# G#
MLPCircleFinder F# G#
MLPFreqFinder G# G#
ScaleFinder C# C#
TheoryFinder G# C#
MLPChordFinder F# C#
MLPCircleFinder F# C#
MLPFreqFinder G# C#
The results for the benchmark programs are more or less as expected.
ScaleFinder gets a few right, but its misses are "close."
TheoryFinder is surprisingly accurate given the extremely minimal change from the base
ScaleFinder class, but in the process clearly shows the utility of basic music theory principles.
The most basic attempt at an MLP fails predictably. By returning the same (blatantly wrong) value for each test datum we see that it is underfitting the function. However, we can't hope to increase the complexity much, as more hidden nodes only exascerbates the parallel problem of (training) data starvation. This issue was considered in the
KeyFinderNeuralNetwork section, and without a doubt rears its head here: the network has in theory the potential to consider more data than any of the benchmark programs, since the individual neurons provide a temporal degree of freedom that the point-counting methods do not, but in practice is nowhere near the needed effectiveness.
The results for
CircleFinder are more disappointing. Again in theory, this method balances providing the complete information available with the needs an underdetermined MLP has for a clearer pattern. Unfortunately, a pattern is not enough: as discussed before, a neural network cannot compare values with neighboring nodes, so that fitting the seemingly-simple average function is not likely with such limited data. Once again the dual fate of sensitive dependence on initial random variables and corresponding inability to respond to test data is met.
With the drastically simplified features of
FreqFinder, some success is found. While it is optimistic at best to expect the nuances between the frequency values to be predictive in an MLP, the number of features is at last small enough for some correlation to be established. Although the second- and third-most common chords inputted are always neighbors in our examples, in practice they are nearly ignored and the most common chord passed through. This pattern, courtesy of the "circle" re-mapping, immediately gives us better results than
ScaleFinder: while it is wrong only slightly less often, its guesses are closer to the mark (harmonically).
onward to
KeyFinderConclusion
There are no comments on this page. [Add comment]