Sometimes you want to visualize what is going on inside your neural network to identify what you could improve. This is not an easy task and may require patience. To help on this task I am sharing today a small JavaFX application that will go through all the activated layers and show the activated output and the ones that were not updated. The results are interesting, see some screenshots I took using the
Brazilian coin model, which was trained on a deep pre-trained Resnet50 neural network:
 |
At the early layers we can see some sort of the shadow of the coin |
 |
In the middle we can see some features that were activated |
 |
Close to the end only some outputs were activated |
It is confusing when we check these huge third party neural networks. It is more interesting when we inspect some neural network we created ourselves. Remember when we used a trained
MNIST model in a JavaFX application? These are the layers after an image classification:
This was possible using the activate method in the layer of a pre-trained model. First you select the model, set its input and then select some image. The Layer.activate method should return an INDArray with the values for the last entered data. We go through this array, normalize its values and build a visual representation using JavaFX Canvas. This is all possible thanks to the great
DeepLearning4J APIs. The API behind DL4j, ND4J, is awesome!
The application
code is on my github. It is a maven project, what you have to do is import it on an IDE and the App class or configure the maven exec plugin to execute the App class. If you are interested in testing this application but having trouble to run it please let me know in the comments.
It does seen to be very stable and there are some bugs, I mean, it seems that the results are not reproducible and I guess I am doing something wrong, but I will try to update the code when I find what is wrong. There's also space for improvements. like adding colors or find a way to mix all the channels values, but I am pretty satisfied with this result so far. Feel Free to send me pull requests and give me feedback, I will be happy to know if someone at least tried to run it on your machine.
Nenhum comentário:
Postar um comentário