I am a deep learning beginner recently reading this book "Deep learning with Python", the example explains the process of implementing a greyscale image classification using MNIST in keras, in the compilation step, it said,

Before training, we’ll preprocess the data by reshaping it into the shape the network expects and scaling it so that all values are in the [0, 1] interval. Previously, our training images, for instance, were stored in an array of shape (60000, 28, 28) of type uint8 with values in the [0, 255] interval. We transform it into a float32 array of shape (60000, 28 * 28) with values between 0 and 1.

Images stored in an array of shape (60000, 28, 28) of type uint8 with values in the [0, 255] interval. For my understanding, the values are between 0-255 of each px and storied as 3D matrix. Can someone explain why needs to "transform" it into the network expects by scaling it and make "all values are in the [0, 1]interval."?

Please also make suggestions if I didn't explain some parts correctly.

  • $\begingroup$ It is not mandatory to rescale from [0,255] to [0,1]. Instead, first layer of the NN can adjust its weights. It is the same a value in range [0,255] with w=0.01 than a value in range [0,1] with w=2.55. Rescale is only mandatory if the NN implementation has some restrictions in the input values. $\endgroup$ Jun 25, 2018 at 7:55

2 Answers 2


The purpose of rescaling gradient descent problems is to reframe the problem for quicker convergence / calculation of linear coefficient parameters. in the Stanford video series, Andrew Ng provides a intuitive explanation and enables one to hone an intuitive understanding.

Multivariate input regression gradient descent converges faster when the inputs are in the same order of magnitude. For example, if predicting house prices based on X1= the number of rooms and X2= area of the home in square feet. X1 is on scale of 0-6 bedrooms and and X2 is typically 1000-3000 square feet. Given the diffence in magnitude, this problem is a good candidate for feature scaling.


T'is easy, but misunderstood. What they mean is to map it from the range of 0-255 to the range of 0-1. This means that 0 would be 0, and 255 would be 1. The code for this is as such in javascript:

function map (num, in_min, in_max, out_min, out_max) {
  return (num - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;

Use the function, like this:

var num = 5;
console.log(map(num, 0, 255, 0, 1)); // 0.0196078431372549
var num = 150
console.log(map(num, 0, 255, 0, 1)); // 0.5882352941176471

Iterate over the entire image, and use the function (or you programming languages equivalent) on every egg or each pixel. By doing so, all values are in the 0,1 interval. Next, all you have to do is to feed it to the network.

  • $\begingroup$ thanks for your explanation it's quite clear now, but why need to do this step for $\endgroup$
    – f.c
    Jun 25, 2018 at 7:17
  • $\begingroup$ Or simply divide by 255.0 $\endgroup$ Jun 25, 2018 at 8:05

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .