Otra de las tareas a realizar en el constructor es la inicialización de los parámetros de la red (pesos y bias). Hay varias formas de inicializar estos valores pero vamos a optar por generarlos de forma aleatoria a partir de una distribución gaussiana de media 0 y desviación estándar 1.
Con este objetivo vamos a crear sendas listas, weights y biases, para contener los pesos y los bias, respectivamente, de las capas de la red neuronal.
Recordemos que el atributo sizes contiene una lista con el número de neuronas artificiales por capa y que el atributo num_layers contiene el número total de capas de la red. Pues bien, de estas "num_layers" capas, la primera es la capa de entrada, y no tiene ni pesos ni bias asociados. El esquema para una red de tamaño [2, 2, 1] era:

Y la representación detallada equivalente era la siguiente:

Como vemos, las dos neuronas de la capa de entrada no servían más que para recibir las muestras y pasarlas a la primera capa oculta.
Por lo tanto, las variables weights y biases solo deberán contener los pesos y bias para las capas que en la variable sizes están representadas con un índice de 1 o superior (es decir, todas menos la de entrada).