Hello Nathan,
Note that normalization is just a mechanism that helps optimize the learning process (e.g., faster convergence, more stability). There is some flexibility to select normalization parameters that lead to good performance. For simplicity, in the original implementation of RouteNet with link capacities (https://github.com/knowledgedefinednetworking/demo-routenet/blob/master/code/routenet_with_link_cap.py#L83) we divided by the maximum link capacity (40) in the datasets we used for training (https://github.com/knowledgedefinednetworking/NetworkModelingDatasets/tree/master/datasets_v0). However, it should work also by normalizing with the mean and standard deviation measured from the datasets.
Regards,
José
Hi
I have looked into this again, with the code in https://github.com/Data-Science-Projects/demo-routenet/blob/master/bin/get_norm_vals_v0.py.
I think that the standard deviation value used for the link capacity normalisation in the routenet_with_link_cap.py code is wrong. The value I get for the standard deviation of the link capacity is ~15. Whereas the original https://github.com/knowledgedefinednetworking/demo-routenet/blob/master/code/routenet_with_link_cap.py#L83 has a value of 40. Please see below.
I can see that you have corrected this in later code samples though.
What are your thoughts please?
Many thanks
Nathan
Feature
Mean
Std. Deviation
Max
Min
Delay
0.37
0.5
7.785
0.023
Jitter
0.09
0.21
3.314
0.0
Traffic
0.35
0.22
1.194
0.029
Link Capacity
22.41
14.78
40.0
10.0
Table 7- Mean, Standard Deviation, Max and Min for nsfnetbw and geant2bw
Feature
Mean
Std. Deviation
Max
Min
Delay
0.4
0.61
10.927
0.022
Jitter
0.09
0.22
4.658
0.0
Traffic
0.19
0.15
1.194
0.014
Link Capacity
22.4
14.77
40.0
10.0
Table 8 - Mean, Standard Deviation, Max and Min for nsfnetbw, geant2bw and synth50bw
The values from the original demo code are shown in Table 9 - Original normalisation values.
Feature
Mean
Std. Deviation
Delay
0.37
0.54
Traffic
0.17
0.13
Link Capacity
25
40
Table 9 - Original normalisation values
On 25 Sep 2019, at 13:56, Nathan Sowatskey <nathan@nathan.to> wrote:
Many thanks. I had planned to factor the normalisation code into discrete functions, so this makes sense. That way I can run different tests with different normalisation strategies.
Regards
Nathan
On 25 Sep 2019, at 12:06, Jose Suárez-Varela <jsuarezv@ac.upc.edu> wrote:
Hello Nathan,
The normalization may be considered a configurable parameter in RouteNet. You may use the normalization function that is more convenient depending on your training data. This means that it is not necessary to apply always a linear function to normalize the data. The only condition is that during the inference you must apply the opposite transformation to the output.
In the case of RouteNet with forwarding nodes, this is a work in progress where we have considered to use a logarithmic function to normalize the delay data and assess if the model fits better.
Regards,
José
El 22/09/2019 a las 17:27, Nathan Sowatskey escribió:
Hi
In the demo code, for example in:
https://github.com/knowledgedefinednetworking/demo-routenet/blob/master/demo_notebooks/demo.ipynb
A form of normalisation is applied:
predictions = 0.54*preds + 0.37
This is consistent with the parse() function here:
https://github.com/knowledgedefinednetworking/demo-routenet/blob/master/code/routenet_with_link_cap.py#L83
if k == 'delay':
features[k] = (features[k] - 0.37) / 0.54
if k == 'traffic':
features[k] = (features[k] - 0.17) / 0.13
if k == 'link_capacity':
features[k] = (features[k] - 25.0) / 40.0
There is another case here:
https://github.com/knowledgedefinednetworking/network-modeling-GNN/blob/master/routenet_with_forwarding_nodes/routenet_with_forwarding_nodes.py#L93
if k == 'delay':
features[k] = (tf.math.log(features[k]) + 1.78) / 0.93
if k == 'traffic':
features[k] = (features[k] - 0.28) / 0.15
if k == 'jitter':
features[k] = (features[k] - 1.5) / 1.5
if k == 'link_capacity':
features[k] = (features[k] - 27.0) / 14.86
if k == 'queue_sizes':
features[k] = (features[k] - 16.5) / 15.5
What is the basis for this normalisation and those specific constants please?
Why does the normalisation in routenet_with_link_cap and routenet_with_forwarding_nodes differ?
Many thanks
Nathan
_______________________________________________
Kdn-users mailing list
Kdn-users@knowledgedefinednetworking.org
https://mail.n3cat.upc.edu/cgi-bin/mailman/listinfo/kdn-users
_______________________________________________
Kdn-users mailing list
Kdn-users@knowledgedefinednetworking.org
https://mail.n3cat.upc.edu/cgi-bin/mailman/listinfo/kdn-users