The output of the neural network can take a few different forms, depending on what you want.
There is the categorization, which will take an input and return the number of the category it is in: nn.evaluate([0, 821, 1643, 2461, 3278, 4092, 4901,...]) would return 2, where 2 is the category ID for 'art.'
A softmax layer will instead return the neural network's probabilities for all of the categories.
nn.evaluate([0, 821, 1643, 2461, 3278, 4092, 4901,...]) would return [0.05, 0.11, 0.75, 0.08]. Both give the same information - it's probably category 2 - but with the softmax layer it is visible how sure of the decision the neural network is.
Because of this additional information, we used softmax outputs throughout.