如何在Python中使用Gradio将机器学习模型部署为一个应用程序

2,377 阅读9分钟

如何使用Gradio将机器学习模型部署为Python中的应用程序

Gradio是一个开源的Python库,允许你为你的机器学习模型快速创建易于使用、可定制的UI组件。

Gradio允许你将图形用户界面直接集成到你的Python笔记本中,使其更容易使用。

在本教程中,我们将探索各种Gradio函数并建立一个简单的Gradio界面。

然后,我们将使用Gradio函数来建立一个图像分类模型。最后,我们将部署网络应用,以便可以用浏览器来访问它。

开始使用Gradio

Gradio是一个强大的工具,它与大多数Python库集成,包括。

  1. Hugging face:它是一个用于建立自然语言处理应用程序的开源库。
  2. Matplotlib:它是一个用于机器学习中的可视化的Python库。
  3. Numpy:它用于数据分析和操作。
  4. PyTorch:它用于计算机视觉和自然语言处理。
  5. Sckit-learn:它为机器学习提供各种分类、回归和聚类算法。
  6. Tensorflow:它用于执行机器学习和人工智能任务。

Gradio也可以嵌入到Jupyter笔记本和Google Colab笔记本中。这不需要运行一个单独的Python脚本。用户可以在工作环境中直接与模型互动。

当你启动一个Gradio界面时,它会自动生成一个链接。它允许其他人使用该链接与你的应用程序进行远程交互。

让我们详细了解一下Gradio的主要好处。

使用Gradio的好处

  • 使你能够创建机器学习模型的演示。这些演示可以用来在实际应用实施之前向客户、用户和团队成员展示想法。

  • Gradio允许收集用户的反馈。因此,开发人员可以进行必要的改进。

  • 在使用Gradio时,你可以很容易地发现模型中的错误和误差。这使你能够在生产之前消除这些错误。

  • Gradio有一个简单的设置,使其更容易建立机器学习应用程序的模型。

  • Gradio使你能够在在线服务器上永久地部署一个应用程序。

  • Gradio会生成一个公共链接,使其他用户能够与应用程序进行远程交互。

安装Gradio

要开始使用Gradio,我们需要在我们的电脑上安装它。由于我们使用的是Google Colab,我们使用下面的命令来安装Gradio。

!pip install -q gradio

然后,使用下面的命令导入Gradio。

import gradio as gr

在建立图像分类模型之前,我们将首先创建简单的Gradio界面。

简单的Gradio界面

为了创建一个用户界面,我们将从创建一个简单的greet 函数开始。该函数将返回Hello 和用户的名字。

该函数是用下面的代码创建的。

def greet(name):
  return "Hello " + name + "!"

接下来,我们需要添加逻辑来创建一个用户界面。该用户界面将允许用户输入他们的名字。

iface = gr.Interface(fn=greet, inputs="text", outputs="text")
iface.launch()

在这段代码中,我们使用gr.interface 函数建立了我们的界面。这个函数有以下参数。

  • fn - 这需要创建的函数作为一个参数。在我们的例子中,创建的函数是 。greet

  • inputs - 这些是用户在Gradio界面中输入的输入组件类型。在我们的例子中,输入类型是 。text

  • outputs - 输出将是处理后的文本。

我们现在使用launch() 方法启动用户界面。该用户界面将出现在Google Colab笔记本中。

该用户界面也将在你的浏览器中使用以下链接运行。https://localhost:7860/.

Gradio UI

该用户界面是互动的。你可以输入你的名字,例如:kelvin ,然后按下submit 按钮,就会输出Hello Kelvin

Gradio还提供了一个独特的URL/公共链接,使人们能够访问你的应用程序。这个链接是https://51358.gradio.app ,在Google Colab笔记本中也可以找到。

在下一个例子中,我们将创建一个可以处理多个输入和输出的用户界面。

实现多个输入和输出

我们将使用一个Python函数,它接收三个参数。myname,is_day, 和temperature

该函数返回用户的名字、一天中的时间和温度(摄氏度)。

如果是早上,用户的界面将显示Good Morning

如果是晚上,用户界面将显示Good Evening 。这可以通过以下代码来实现。

def greet(myname, is_day, temperature):
  greeting = "Good Morning" if is_day else "Good Evening "
  salute = "%s %s. It is %s degrees today" % (
    greeting, myname, temperature)
  celsius = (temperature - 24) * 7 / 9
  return salute, round(celsius, 2)

让我们来创建Gradio界面。用于创建Gradio界面的函数如下所示。

iface = gr.Interface(
 fn=greetings,
 inputs=["text", "checkbox", gr.inputs.Slider(0, 100)],
 outputs=["text", "number"])
iface.launch()

gr.Interface 接受三个参数。

  • fn.它接收了创建的函数:greet

  • inputs - 输入组件将是一个文本类型和一个复选框,用于选择是否是 。is_day

  • 我们还必须指定gr.inputs.Slider 。这是用来选择0100 之间的一天的摄氏度。

  • outputs- 这将显示输出,它将以text 的形式和number 来表示摄氏度。

让我们检查一下输出。

Multiple inputs and outputs

如果用户没有选择复选框,输出将如下图所示。

Multiple inputs and outputs

到目前为止,我们已经使用各种函数创建了两个Gradio用户界面。我们能够在Google Colab应用程序和浏览器中访问该用户界面。

现在让我们用Gradio来创建图像分类模型。

图像分类模型

为了建立图像分类模型,我们需要导入机器学习包。

这些包将被用来建立模型。Gradio将被用来建立模型的用户界面。

这使用户能够与应用程序进行互动。我们使用以下代码导入它们。

import tensorflow as tf
import numpy as np
import requests

Tensorflow

它被用来训练我们的模型以了解图像分类。它包含有许多层的深度神经网络,形成模型架构。

numpy

它将用于数据分析和操作。

请求

它使用Python发送HTTP请求。这使我们能够与外部服务器互动。

让我们加载用于图像分类的方法。

inception_net = tf.keras.applications.InceptionV3()

InceptionV3() 方法是用来处理TensorFlow库中的图像分类。

添加人类可读的标签

在本节中,我们要处理的是动物图像的分类。我们需要将这些动物的真实名字添加到我们的模型中,以便人类能够理解它们。

这是用下面的代码完成的。

response = requests.get("https://git.io/JJkYN")
labels = response.text.split("\n")

在这段代码中,requests.get 被用来从"https://git.io/JJkYNURL "下载所有的动物名称

response.text.split 用于格式化这些名称并将其添加到模型中,如 。labels

现在让我们创建一个函数来对图像进行分类。

def classify_image(inp):
    inp = inp.reshape((-1, 299, 299, 3))
    inp = tf.keras.applications.inception_v3.preprocess_input(inp)
    prediction = inception_net.predict(inp).flatten()
 return {labels[i]: float(prediction[i]) for i in range(2000)}

让我们来理解上面的函数。

inp.reshape 是用来将我们的图像重塑为给定的尺寸,使其更容易使用。我们还将我们的 加入到我们的输入图像中。inception_v3()

我们对输入层进行扁平化处理,使其适合我们的模型。最后,我们使用prediction() 方法返回预测后的输出。

使用Gradio构建用户界面

我们首先初始化Gradio用户界面的输入组件。输入组件持有用户上传的图片。

用户将能够在用户界面中上传一张动物图片,然后机器学习模型应该能够对动物进行分类并输出其名称。

输入组件应该与分类功能中给出的尺寸相匹配。输入组件将持有一个尺寸为299, 299, 3 的图像。

下面的代码指定了inputsImage ,因为299, 299outputs.Label ,总共会有three 的预测。

这三个预测是该模型所做的所有可能的预测。

image = gr.inputs.Image(shape=(299, 299))
label = gr.outputs.Label(num_top_classes=3)

现在让我们用下面的函数来创建Gradio接口。

gr.Interface(
    classify_image,
    image,
    label,
 capture_session=True).launch();

gr.Interface 这个函数有四个参数。

  • classify_image:这个函数用于图像分类。
  • Image:由用户提供的图像。
  • Label:预测后显示的输出。
  • launch():这将用于在Google Colab笔记本上或通过一个公共链接启动Gradio界面。

一旦你运行上述代码,它将显示如下所示的用户界面。

Image classification interface

上述用户界面有一个输入组件,允许人们拖放或上传要分类的图像。

让我们下载一张狮子或任何其他动物的图片。将图像拖放或上传至输入组件。

点击提交按钮,查看预测结果。

Prediction results

Gradio给出的预测结果如下。

  • 狮子:98%的概率。
  • 猎豹:0%的概率。
  • 阿拉伯骆驼:0%的概率。

这表明,该模型能够对狮子做出正确的预测,其概率为98%

Gradio还自动部署了图像分类应用程序。我们可以使用一个独特的URL/公共链接访问该应用程序。https://39965.gradio.app.

一旦你启动用户界面,这个链接将在你的Google Colab笔记本中出现。

因此,我们已经成功部署了我们的应用程序。它将可以通过唯一的URL进行访问。这个机器学习应用程序可以用于生产。

总结

在本教程中,我们已经了解了如何使用Gradio在Python中把机器学习模型部署为一个应用程序。

我们首先讨论了Gradio的好处以及它如何生成漂亮的用户界面。

然后,我们探索了Gradio函数,并使用这些函数创建了用户界面。从那里,我们建立了一个图像分类模型,它能够对动物图像进行分类。

最后,该应用程序被自动部署。人们现在可以使用Gradio提供的独特的URL与该应用进行交互。

因此,本教程将帮助读者使用Gradio在Python中部署一个机器学习模型作为应用程序。