3. Normalització de lots
Batch normalization¶
En esta activitat observarem com la normalització de lots pot solucionar problemes en l'entrenament.
Carregueu el dataset Concrete. Aquesta vegada no estandarditzarem les dades abans de passar-les a entrenament, així podrem observar com l'efecte de la normalització de lots es fa molt més evident.
import pandas as pd
concrete = pd.read_csv('data/concrete.csv')
df = concrete.copy()
df_train = df.sample(frac=0.7, random_state=0) # train_test_split amb pandas
df_valid = df.drop(df_train.index) # eliminem els index que estan a df_train
X_train = df_train.drop('CompressiveStrength', axis=1)
X_valid = df_valid.drop('CompressiveStrength', axis=1)
y_train = df_train['CompressiveStrength']
y_valid = df_valid['CompressiveStrength']
input_shape = [X_train.shape[1]]
X_train.head()
Pregunta 1¶
Defineix una xarxa neuronal amb 4 capes:
- tres de 512 neurones
- la capa d'eixida
- la funció d'activació serà relu per a totes elles
Compila el model amb:
- optimitzador sgd
- la funció de pèrdua mae
- la mètrica mae
Entrena la xarxa amb:
- 64 mostres per lot
- 100 èpoques
Representa les corbes d'aprenentatge.
No et preocupes si el gràfic està en blanc. Intentar entrenar aquesta xarxa amb aquest conjunt de dades normalment fallarà. Fins i tot quan convergeix, a causa d'una inicialització de pes afortunat, tendeix a convergir a un número molt gran.
Pregunta 2¶
Afegiu capes de normalització de lots. La normalització de lots pot ajudar a corregir problemes com aquest.
Afegiu quatre capes de "BatchNormalization", una abans de cadascuna de les capes denses i torneu a representar les corbes d'aprenentatge.
Pregunta 3¶
Representa en dos subplots les corbes d'aprenentatge de les preguntes anteriors. Comenta les gràfiques.