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é

El 9/11/19 a las 20:53, Nathan Sowatskey escribió:
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