How do I compute geometric mean of the weights and biases in a federated learning settings?

I’m able to compute the arithmetic mean, only.

Hi en!

You can calculate the geometric mean directly. Suppose that you

have the weights and/or biases whose geometric mean you want

in a single tensor, `w`

. Then:

```
geom_mean = w.prod()**(1 / w.numel())
```

Note, it might be preferable to perform the calculation in log-space:

```
geom_mean = w.log().mean().exp()
```

(The geometric mean only makes sense – for some definition of

“makes sense” – if the values are all strictly positive. As you can

see, both the fractional power in the direct-space calculation and

the `log()`

in the log-space calculation will fail for negative values.)

Best.

K. Frank

Thanks for your response Frank. I tried your approach, but it didn’t work for my case.

Instead of the mean computation below, I want the geom.

```
model_dict[k] = th.stack([h_models[i].state_dict()[k].float()*(n*h_lens[i]/total) for i in range(len(h_models))], 0).mean(0)```
code source: (https://towardsdatascience.com/preserving-data-privacy-in-deep-learning-part-3-ae2103c40c22)
```