Is there a different between one hot encoding and labelling categorical as scalar value and then normalise the batch?
The second option is wrong. If you label Male, Female, Undefined as [0, 1, 2] you are treating categories as numbers. That is not correct. The Network in this way would learn something such as Undefined &gt; Female, which doesn't make sense.

You need one hot encoding to treat those variables: they are not a numerical values that you can put on a scale.

About the Age question: if that's a numerical variable (expressed in years, I guess?) then you can feed it directly into the Neural Network without problems.