📜  创建 Keras 回调以在 WhatsApp 上发送通知

📅  最后修改于: 2022-05-13 01:55:00.808000             🧑  作者: Mango

创建 Keras 回调以在 WhatsApp 上发送通知

每当从事研究项目时,训练神经网络都需要很长时间。因此,我们启动了培训过程,并让笔记本电脑安静地待了一段时间。很多时候,由于网络错误或任何其他问题,该过程会在两者之间停止。在这些情况下,人们希望在训练过程停止(由于错误或完成指定数量的 epoch 后)立即得到通知,以便可以相应地采取后续步骤,而浪费时间最少。

在本教程中,我们将创建一个 Keras 回调,用于在 WhatsApp 上发送有关您的深度学习模型的通知。本教程大致分为 3 个部分 -

  • 使用Python向 WhatsApp 发送消息
  • 创建 Keras 回调并了解其工作原理
  • 将它们捆绑在一起

使用Python向 WhatsApp 发送消息

有许多方法可以将 WhatsApp messenger 与Python连接起来。但是,最简单的一种是使用 Twilio 的。 Twilio 是一个通信平台,允许开发人员在不同平台上发送通知,例如普通文本 SMS、WhatsApp 甚至语音通话。它提供了一个非常简洁的 API 用于连接 WhatsApp 和Python。

第 1 步。前往此链接并注册 Twilio。

第 2 步。通过点击此链接激活 WhatsApp 的 Twilio 沙盒。您将能够看到如下所示的界面。您可以通过将此号码(突出显示)保存为手机上的联系人并向保存的联系人发送消息“加入主圈”来激活沙盒。等待界面显示确认消息。

发送消息

第 3 步。通过单击屏幕左上角的 Twilio 徽标或单击此链接,前往 Twilio 控制台。在这里,您可以找到在Python中设置 Twilio 客户端时需要的 Account ID 和 Auth Token。

twilio 注册

步骤 4.在Python中设置 Twilio 客户端并发送您的第一条消息。打开代码编辑器并将以下代码粘贴到Python文件中。在下面的代码片段中, account_sidauth_token是从控制台获取的令牌,如步骤 3 所示。“Your_whatsapp_number”是您希望接收文本通知的号码。最后,“From_number”是您在步骤 2 中为 WhatsApp 设置 Twilio Sandbox 时遇到的电话号码。注意 - 在号码中包含国家代码。例如 - 如果您的电话号码是 112233445 并且国家/地区代码是 +91,您必须在“Your_whatsapp_number”字段中填写 +91112233445。

from twilio.rest import Client
   
account_sid = '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)

执行此脚本后,您将在您的手机上看到来自步骤 2 中获得的号码的 WhatsApp 通知。

创建 Keras 回调并了解其工作原理

根据 Keras 官方文档,“回调是在训练过程的给定阶段应用的一组函数。您可以在训练期间使用回调来查看模型的内部状态和统计信息”。
在训练您的深度神经网络时,您可能会遇到想要记录不同指标的情况,例如准确性、文件丢失或随时期改变学习率(自适应学习率)。在这些情况下,我们使用名为 Callbacks 的类的对象,它允许您在训练、测试或评估过程的不同阶段检索、设置不同模型参数的值。 TensorFlow 官方指南是学习如何创建自己的回调的绝佳资源。

TensorFlow 团队在命名 Callback 类中的方法方面做得非常出色,这使得理解每个函数打算做什么/能够做什么变得非常简单。使用的命名约定以 on_{train/test/batch/epoch}_{begin/end} 的形式命名每个函数。

对于我们的任务,我们想知道模型何时停止训练。该信息可以从函数on_train_end() 中获得。因此,我们可以创建一个类“WhatappCallBack”,它扩展了 Keras 的 Callback 类。在这个类中,我们将重载 on_train_end()函数以了解所需的信息。

首先,我们将我们为使用 Twilio 发送消息而编写的代码封装在一个名为“send_message”的函数中。这个函数接收我们想要发送的文本作为参数。

# 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*********'
 )

接下来,我们定义回调并重载 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)

正如我们在这里看到的,我们在训练过程的开始和结束时发送消息。我们还通过回调发送训练损失。

将它们捆绑在一起

为了测试我们的函数,我们需要定义一个简单的前馈网络并创建一个虚拟数据集。这将在接下来的步骤中演示。

步骤 1.我们使用 sklearn 库的 make_classification 方法生成 1000 个随机样本数据点和一个非常简单的 ANN。

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()

第 2 步。我们创建一个 ''WhatappCallBack' ' 类的实例,并在拟合我们的模型时在回调参数中传递这个实例。

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

步骤 3.享受结果

输出

以下存储库中的整个工作代码 -
https://github.com/Raman1121/ML-Practice/blob/master/CustomCallback.ipynb

参考:

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