Transforming neural network target values before training

Consider the scenario in which I am measuring certain $$f(a,x)$$, which i want to be the target value for some related input $$g(a,x)$$. In other words, I am trying to map

$$g(a,x)\Rightarrow f(a,x)$$

I know that

$$f(a,x) = a x^{-3/4}$$

With $$x \in [1,20]$$ and $$a=[1,2,3]$$. I now perform "measurements" for $$x=[1,2,...,20]$$ and $$a=[1,2,3]$$.The histogram of my target values looks awful:

And that means that the neural network will favor smaller output values. I believe there are two solutions to make the distribution more "even" so that the neural network treats each target value equally:

1. Transform the output variable

This is troublesome, because for example the mapping $$f'(a,x)=f(a,x)^{-3/4}$$ still leads to a skewed distribution because of the varying constant $$a$$:

2. Perform measurements for certain $$x_i$$ such that the output is more evenly distributed. Constraint: I must always measure for each $$a$$.

I still want to sample the whole range, so I could do

$$x=\mathrm{linspace}(1,20^{-3/4},n=19)$$

$$x_i'= x_i^{-4/3}$$

But this only gives "plateaus" of uniformity, one for each unique $$a$$. You can see this by increasing the number of points to sample:

So my question: what is the best way to generate/transform the data for my $$f(x)$$ with $$a=[1,2,3]$$ so that the target values are distributed in such a way that it does not favour certain values?

PS: $$f(a,x)$$ is something that I have to measure in the real world, I cannot do more than 20 measurements.

• Can you explain how we should read those diagrams? What is on the x and y axes? This would improve the readability of your post. Also, can you explain why you want the distribution of your output/target values to be more uniform? Are you trying to build a balanced dataset: is this your purpose? – nbro Nov 5 at 11:35