Creación de una devolución de llamada de Keras para enviar notificaciones en WhatsApp

Siempre que se trabaja en un proyecto de investigación, entrenar una red neuronal lleva mucho tiempo. Entonces iniciamos el proceso de entrenamiento y dejamos la computadora portátil en paz por un tiempo. Muchas veces, el proceso se detiene debido a un error de red o cualquier otro problema. En estos casos, uno querría ser informado tan pronto como se detenga el proceso de entrenamiento (debido a un error o después de completar el número especificado de épocas) para que pueda tomar los siguientes pasos en consecuencia con una mínima pérdida de tiempo.

En este tutorial, crearemos una devolución de llamada de Keras que envíe notificaciones sobre su modelo de aprendizaje profundo en su WhatsApp. Este tutorial se divide ampliamente en 3 segmentos:

Enviar mensajes a WhatsApp usando Python

Hay una serie de métodos para conectar el mensajero de WhatsApp con python. Sin embargo, el más simple es el que usa Twilio . Twilio es una plataforma de comunicaciones que permite a los desarrolladores enviar notificaciones en diferentes plataformas, como SMS de texto estándar, WhatsApp e incluso llamadas de voz. Ofrece una API muy limpia y concisa para conectar WhatsApp con Python.

Paso 1. Dirígete a este enlace y regístrate en Twilio.

Paso 2. Active Twilio Sandbox para WhatsApp siguiendo este enlace. Podrás ver una interfaz como la siguiente. Puede activar la zona de pruebas guardando este número (resaltado) como un contacto en su teléfono y enviando el mensaje ‘unirse al círculo principal’ al contacto guardado. Espere a que la interfaz le muestre un mensaje de confirmación.

sending-messages

Paso 3. Diríjase a su consola Twilio haciendo clic en el logotipo de Twilio en la esquina superior izquierda de su pantalla o haciendo clic en este enlace. Aquí puede encontrar su ID de cuenta y su token de autenticación, que serán necesarios al configurar su cliente Twilio en Python.

twilio registeration

Paso 4. Configuración del cliente Twilio en Python y envío de su primer mensaje. Abra un editor de código y pegue el siguiente código en un archivo python. En el fragmento de código a continuación, account_sidy auth_tokenson los tokens obtenidos de la consola como se muestra en el Paso 3. ‘Tu_número_de_whatsapp’ es el número donde deseas recibir las notificaciones de texto. Finalmente, ‘From_number’ es el número de teléfono que encontró al configurar Twilio Sandbox para WhatsApp en el paso 2. Nota: incluya el código de país en los números. Por ejemplo, si su número de teléfono es 112233445 y el código de país es +91, debe escribir +91112233445 en el campo ‘Su_número_de_whatsapp’.

from twilio.rest import Client
   
account_sid = '<YOUR-ACC-ID-HERE>8' # Obtained from Step-3
auth_token = 'your_auth_token' # Obtained from Step-3
   
Your_whatsapp_number = ‘+911234567899’ # Include the country code
From_number = ‘+1488*****’ # Obtained from Step 2
   
client = Client(account_sid, auth_token)
   
message = client.messages.create(
                             body ='Hello there !',
                             from_= From_number,
                             to = Your_whatsapp_number
                         )
print(message.sid)

Al ejecutar este script verás en tu móvil una notificación de WhatsApp del número obtenido en el Paso 2.

Creación de una devolución de llamada de Keras y comprensión de cómo funciona

Según la documentación oficial de Keras , “una devolución de llamada es un conjunto de funciones que se aplicarán en determinadas etapas del procedimiento de formación. Puede usar devoluciones de llamada para obtener una vista de los estados internos y las estadísticas del modelo durante el entrenamiento”.
Mientras entrenaba sus redes neuronales profundas, es posible que haya enfrentado situaciones en las que desee registrar diferentes métricas, como la precisión, la pérdida de un archivo o el cambio de la tasa de aprendizaje con épocas (tasas de aprendizaje adaptativo). En estas situaciones, usamos un objeto de una clase llamada Callbacks que le permite recuperar y establecer valores de diferentes parámetros del modelo durante diferentes etapas del proceso de capacitación, prueba o evaluación. La guía oficial de TensorFlow es un excelente recurso para aprender a crear su propia devolución de llamada.

El equipo de TensorFlow ha hecho un excelente trabajo al nombrar los métodos en la clase Callback, lo que hace que sea realmente sencillo comprender qué debe hacer/capaz de hacer cada función. La convención de nomenclatura usaba nombres para cada función en forma de on_{tren/ prueba/ lote/ época}_{comienzo/ fin}.

Para nuestra tarea, queremos saber cuándo un modelo deja de entrenar. Esta información podría obtenerse de la función on_train_end(). Por lo tanto, podemos crear una clase ‘WhatappCallBack’ que amplíe la clase Callback de Keras. Dentro de esta clase, sobrecargaremos la función on_train_end() para conocer la información requerida.

Primero, encapsulamos el código que escribimos para enviar un mensaje usando Twilio en una función llamada ‘send_message’. Esta función toma como parámetro el texto que queremos enviar.

# Can be obtained from Twilio Console
account_sid = 'account_ID' 
auth_token = 'auth_token'  
client = Client(account_sid, auth_token)
 
message = client.messages \
.create(
     from_='whatsapp:+14155238886',
     body = text,
     to ='whatsapp:+918*********'
 )

A continuación, definimos nuestra devolución de llamada y sobrecargamos la función on_train_end().

class WhatsappCallBack(Callback): 
  def on_train_begin(self, logs = None):
    # Initializing the list of losses
    self.losses = [] 
    # Sending message on whatsapp at the beginning of the training
    send_message("The training has started")
  
  def on_epoch_begin(self, epoch, logs = None):
    pass
      
  
  def on_epoch_end(self, epoch, logs = None):
    self.losses.append(logs['loss'])
  
  def on_train_end(self, logs = None):
# Sending message on whatsapp at the end of the training
    send_message("The training has ended") 
    send_message(self.losses)

Como podemos ver aquí, estamos enviando mensajes al principio y al final del proceso de formación. También enviamos la pérdida de entrenamiento a través de nuestra devolución de llamada.

atarlo todo junto

Para poner a prueba nuestra función, necesitamos definir una red de retroalimentación simple y crear un conjunto de datos ficticio. Esto se demostrará en los siguientes pasos.

Paso 1. Usamos el método make_classification de la biblioteca sklearn para generar 1000 puntos de datos de muestra aleatorios y una ANN muy simple.

x, y = make_classification(n_samples = 1000, n_classes = 2, n_features = 20)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3)
  
def create_model():
  model = Sequential()
  model.add(Dense(60, input_dim = 20, activation ='relu'))
  model.add(Dense(1, activation ='sigmoid'))
  model.compile(loss ='binary_crossentropy', optimizer ='adam', metrics =['accuracy'])
  
  return model
  
model = create_model()

Paso 2. Creamos una instancia de la clase »WhatappCallBack» y pasamos esta instancia en el argumento de devolución de llamada mientras ajustamos nuestro modelo.

cb2 = WhatsappCallBack()
 # Fitting the model
model.fit(x_train, y_train, batch_size = 32, epochs = 20, callbacks =[cb2], verbose = 1)

Paso 3. Disfruta de los resultados

Output

Todo el código de trabajo en el siguiente repositorio:
https://github.com/Raman1121/ML-Practice/blob/master/CustomCallback.ipynb

Referencias:

1. https://keunwoochoi.wordpress.com/2016/07/16/keras-callbacks/
2. https://www.twilio.com/docs/whatsapp/tutorial/send-whatsapp-notification-messages-templates

Publicación traducida automáticamente

Artículo escrito por ramandutt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *