Like si se te reinició Google Colab porque agotaste toda la RAM disponible.
Apropiar conceptos fundamentales de las redes neuronales
¿Qué es una red neuronal?
Identificar los principales Frameworks usados en la industria para el desarrollo de Deep Learning
Frameworks de Deep Learning
Comprender los modelos de representación de las redes neuronales artificiales usados en Deep Learning
Estructura de redes neuronales
Creando nuestra primer red neuronal
Entrenando nuestra primera red neuronal
Visualizando el proceso de entrenamiento
Funciones de activación
Funciones de costo o pérdidas
Inicialización y Entrenamiento de RN
Optimizadores en redes neuronales
Clasificación Binaria
Clasificación de potenciales clientes
Análisis de resultados
Métricas de desempeño: regresión y clasificación
Evaluando métricas de desempeño
Ajuste de redes neuronales: overfitting y regularización
Regularización
Ajuste de redes neuronales: Hiper parámetros
Crear un modelo de regresión a partir de un caso de uso real
Introducción a las regresiones con Deep Learning: Planteamiento del problema
Solución del problema de regresión
Ajustes finales al proyecto
Cierre del curso
Cierre del curso
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 12
Preguntas 2
Like si se te reinició Google Colab porque agotaste toda la RAM disponible.
Para prevenir el reinicio del colab por falta de RAM lo que hice fue exportar el dataframe y agregarlo a un nuevo notebook.
Dejo el código por si a alguien más le interesa
#preparacion del df con las variables consolidadas
mi_consolidado = consolidado.copy(deep=True)
def OneHotEncoding_df(df, columna):
OHE_df = pd.get_dummies(columna+'_'+df[columna])
return OHE_df
objects_list = list(types[types.values == 'object'].index)
#Se realiza OHE para cada categoría
for category in objects_list:
mask = OneHotEncoding_df(mi_consolidado, category)
print(f'column {category} transformed!')
mi_consolidado.drop(category, axis=1, inplace=True)
mi_consolidado = pd.concat([mi_consolidado, mask], axis=1)
# exportar modelo
mi_consolidado.to_pickle('variables_consolidadas.pkl')
En el nuevo notebook hice la división de datos de entrenamiento y prueba de esta manera:
variables_consolidadas = pd.read_pickle('variables_consolidadas.pkl')
objetivo = variables_consolidadas['outcome']
variables_consolidadas.drop('outcome', axis=1, inplace=True)
ya despues de aqui todo es igual al notebook de la clase.
from sklearn.model_selection import train_test_split
# Entrenamiento y prueba con relación 80:20
x_train, x_test, y_train, y_test = train_test_split(variables_consolidadas,objetivo, test_size=0.2,random_state=2020)
# Entrenamiento y validación con relación 90:10
x_train, x_val, y_train, y_val = train_test_split(x_train,y_train, test_size=0.1, random_state=2020)
print("Shape of x_train:",x_train.shape)
print("Shape of x_test:",x_test.shape)
print("Shape of x_val:",x_val.shape)
print("Shape of y_train:",y_train.shape)
print("Shape of y_test:",y_test.shape)
print("Shape of y_val:",y_val.shape)
`
La columna people_id no debería ser considerada en el entrenamiento o aprendizaje de la red neuronal. No aporta información para generalizar a los clientes
En vez de hacer model.add() tambien se puede hacer:
model = Sequential([Capa 1, Capa 2, etc])
En mi caso para graficar tuve que guardar el entrenamiento del modelo como una variable, dejo las ultimas partes de mi notebook
# Volvemosa utilizar el modelo anterior sustituyendo los dataframes
model = Sequential()
model.add(Dense(512,input_dim = x_train_scaled.shape[1],activation="relu"))
model.add(Dense(512,activation="relu"))
model.add(Dense(256,activation="relu"))
model.add(Dense(1,activation = "sigmoid"))
model.compile(optimizer = "Adam",loss="binary_crossentropy",metrics=["accuracy"])
#guardar modelo en una variable para acceder al diccionario de valores
history = model.fit(x_train_scaled,y_train, validation_data = (x_val_scaled,y_val),epochs=12, batch_size=128)
Grafica
import matplotlib.pyplot as plt
%matplotlib inline
plt.figure(figsize=(13,6))
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title("Pérdidas del modelo con set de entrenamiento y pruebas por época")
plt.ylabel('Pérdidas')
plt.xlabel('Épocas')
plt.legend(['Entrenamiento', 'Validación'], loc='upper right')
plt.show()
)
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title("Pérdidas del modelo con set de entrenamiento y pruebas por época")
plt.ylabel('Pérdidas')
plt.xlabel('Épocas')
plt.legend(['Entrenamiento', 'Validación'], loc='upper right')
plt.show()
[“outcome”].abs().sort_values()
con esto se encuentra las correlaciones que existen entre los distintos features ( mientras mas cerca a 0 menos influyen y se deben de descartar) ,aqui se observa que almenos 10 features de estan en vano y se deben eliminar para aligerar el modelo
Justo antes de terminar la primera epoch me salta este error:
ValueError: Data cardinality is ambiguous:
x sizes: 439459
y sizes: 175784
Make sure all arrays contain the same number of samples.
El tamaño de los conjuntos y la arquitectura son iguales a los del video, no se como solucionarlo.
En mi caso usé la potencia de mi PC y no la Colab, debo decir que me tardo como 2 hs en completar todo los modelos 😃
Recordemos que binary cross entropy o log function es la misma funcion de perdida que se usa para la regresion logistica, ya que nuestra ultima neurona(output) usa la funcion sigmoide como funcion de activacion.
Me demore por el computo tres horas en este video jajajaja
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?