# nnp-prune

The tool nnp-prune is used to identify and remove symmetry functions that have little effect on the training performance. There are two modes of operation:

## Prune before training

Here, symmetry functions are discarded if their range (i.e. maximum - minimum value over the entire data set) is below a provided threshold. The first step is to calculate all symmetry functions with nnp-scaling:

mpirun -np 4 nnp-scaling 500


This will produce the file scaling.data where minimum, maximum, mean and sigma values are stored. Then, in the same directory call for example

nnp-prune range 1.0E-4


to eliminate all symmetry functions with range below $$10^{-4}$$. The resulting settings file is called output-prune-range.nn. It is an exact copy of input.nn but all lines with pruned symmetry functions are commented out. If the result is reasonable, rename the file to input.nn and start over with the training process (note: do not forget to calculate scaling.data again with nnp-scaling).

## Prune after training

After a neural network potential has been fitted with nnp-train it is possible to identify unnecessary symmetry functions with a so-called sensitivity analysis. Here, the derivatives of the output neuron with respect to the input layer neurons, i.e. the symmetry functions, are averaged over the whole data. This analysis is automatically performed by nnp-dataset and the results are stored in files like sensitivity.008.out (for the oxygen neural network):

mpirun -np 4 nnp-dataset 1


With the sensitivity data ready, use the pruning tool to automatically remove symmetry functions with a sensitivity below the threshold:

nnp-prune sensitivity 0.5 max


Here, the threshold is set to 0.5% where 100% is equal to the total sum of all sensitivities. The resulting settings file is called output-prune-sensitivity.nn and is again an exact copy of input.nn, only with commented pruned symmetry function lines.