Gradio实现算法可视化

本文介绍了Gradio包,它可在Python中构建演示并分享,能省略写flask后端服务和前端开发界面等复杂工作。文中涵盖Gradio的安装、Hello World示例、接口类使用,包括单输入输出和多输入输出情况,还提及在模型推理场景的应用,最后给出注意事项和参考资料。

Gradio

最近看到一个新的包,感觉挺好玩的,这里记录一下。

与他人共享机器学习模型,API或数据科学工作流程的最佳方法之一是创建一个交互式应用程序,使用户或同事可以在浏览器中尝试演示。

Gradio允许在Python中构建演示并分享它们,通常只需要几行代码即可完成之前需要写flask后端服务,前端开发用户界面等复杂工作。

安装

pip install gradio

Hello World

开始学起都是从输出"hello world"开始,这里也不例外。

import gradio as gr

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

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

demo.launch()

上面的代码运行后,在http// localhost:7860上弹出浏览器:

在这里插入图片描述

左边输入对应的name,右边有基于程序的输出:

在这里插入图片描述

接口类

为了制作演示,上面创建了gradio.interface此接口类可以让用户界面包装任何Python函数。在上面的示例中,演示了一个简单的基于文本的功能,接收文本输入,并添加hello+该文本输出。此功能不仅仅局限于该功能,可以是任何函数,比如音乐生成器,税收计算器再到机器学习模型的推理功能的任何内容。

核心接口类Interface以三个必需的参数初始化:

  • fn:包裹UI的功能函数

  • input:用于输入的哪个组件(例如 "text", "image" 或者"audio"

  • output:用于输出的哪个组件(例如 "text", "image" 或者"audio"

组件属性:

  • textbox: 比text有更大的空间,且可以添加提示字符串 ,用法: inputs=gr.Textbox(lines=2, placeholder="Name Here...")
    在这里插入图片描述

多输入和输出组件

假设输入和输出比较复杂,有多个的情况下,可以通过列表的方式进行传递参数。下面是一个计算器,实现加减乘除的功能,输入是两个数字,中间可以加四种运算符中的其中一种,在输入中只需要将其按照对应的格式排列好即可。[[5, "add", 3],] 表示5+3。可以用example表示默认示例。

import gradio as gr

def calculator(num1, operation, num2):
    if operation == "add":
        return num1 + num2
    elif operation == "subtract":
        return num1 - num2
    elif operation == "multiply":
        return num1 * num2
    elif operation == "divide":
        if num2 == 0:
            raise gr.Error("Cannot divide by zero!")
        return num1 / num2

demo = gr.Interface(
    calculator,
    [
        "number", 
        gr.Radio(["add", "subtract", "multiply", "divide"]),
        "number"
    ],
    "number",
    examples=[
        [5, "add", 3],
        [4, "divide", 2],
        [-4, "multiply", 2.5],
        [0, "subtract", 1.2],
    ],
    title="Toy Calculator",
    description="Here's a sample toy calculator. Enjoy!",
)
if __name__ == "__main__":
    demo.launch()

在这里插入图片描述

更多接口属性可以参考官方文档。

模型推理

模型推理可能是更加适合的场景。如果你是一名AI工程师或数据科学家,可能熟悉以下情况:刚刚花了数周的时间开发新的机器学习模型,终于对其性能感到满意,并且想向其它人展示它。这个时候如果只是单独的跑一下程序得到一个数字或者字符串可能不是那么直观,Gradio就能帮助我们省略掉写接口服务及前端演示界面的开发等环节。

下面介绍如何将分类模型PyTorch+ResNet152, 这块需要自己装一下PyTorch环境, CPU/GPU都可以

pip install torch==1.10.0 torchvision==0.11.0
import torch
import gradio as gr
from PIL import Image
from torchvision import transforms
import requests

# load model 机器要能联网,需要下载训练好的公开模型
model = torch.hub.load('pytorch/vision:v0.6.0', 'resnet152', pretrained=True).eval()


# load 1000类标签
labels = []
# labels.txt 可以通过`https://git.io/JJkYN`下载
with open('labels.txt') as f:
    for ln in f:
        label = ln.rstrip('\n')
        labels.append(label)


def predict(inp):
  inp = Image.fromarray(inp.astype('uint8'), 'RGB')
  inp = transforms.ToTensor()(inp).unsqueeze(0)
  with torch.no_grad():
    prediction = torch.nn.functional.softmax(model(inp)[0], dim=0)
  return {labels[i]: float(prediction[i]) for i in range(1000)}


inputs = gr.inputs.Image()
outputs = gr.outputs.Label(num_top_classes=3)

# share = True 表示可以生成一个url链接,公众通过该url就能体验该功能,有效期72h
gr.Interface(fn=predict, inputs=inputs, outputs=outputs).launch(share=True)  

在这里插入图片描述

在这里插入图片描述

注意

如果想指定端口号且不想用127.0.0.1这个地址而是用原始的服务器ip地址,可以在demo.launch()中加一些指定的参数:

demo.launch(server_name='xx.xx.xx.xx', server_port=8080)

参考

### 关于算法可视化的工具及其实现方法 #### Gradio 实现算法可视化 Gradio 是一种非常高效的工具,可以快速创建交互式的用户界面来展示机器学习模型或其他复杂算法的功能[^4]。通过简单的 API 调用,开发者无需编写复杂的前端代码即可生成动态的 Web 应用程序。以下是使用 Gradio 的基本示例: ```python import gradio as gr def greet(name): return f"Hello, {name}!" demo = gr.Interface(fn=greet, inputs="text", outputs="text") demo.launch() ``` 上述代码展示了如何利用 Gradio 创建一个简单的文本输入和输出界面。 --- #### 数据分析与处理中的 Pandas 工具支持 Pandas 提供了强大的功能来进行数据预处理以及初步的数据可视化工作[^2]。虽然其主要用途在于数据分析而非专门针对算法本身进行可视化,但它可以通过绘制图表等方式辅助理解某些计算过程的结果。例如,下面是一段基于 pandas 和 matplotlib 绘制折线图的例子: ```python import pandas as pd import matplotlib.pyplot as plt data = {'Year': [1920, 1930, 1940, 1950], 'Unemployment_Rate': [8.0, 7.2, 6.5, 7.0]} df = pd.DataFrame(data) plt.plot(df['Year'], df['Unemployment_Rate']) plt.title('Unemployment Rate Over Time') plt.xlabel('Year') plt.ylabel('Unemployment Rate') plt.show() ``` 此脚本说明了如何借助 pandas 来加载并准备数据集以便后续绘图操作。 --- #### 高维数据降维后的可视化技术 当面对多维度空间内的点分布时,通常会采用诸如 PCA(主成分分析)、t-SNE 或 UMAP 这样的降维技术先将原始特征投影到二维平面上再加以显示[^3]。这种做法有助于揭示隐藏模式或群组关系,在聚类任务中尤为重要。 假设有一个 scikit-learn 中使用的 Iris 数据集作为例子,则可按如下方式执行 t-SNE 可视化: ```python from sklearn.datasets import load_iris from sklearn.manifold import TSNE import seaborn as sns import matplotlib.pyplot as plt iris = load_iris() X_tsne = TSNE(n_components=2).fit_transform(iris.data) sns.scatterplot(x=X_tsne[:, 0], y=X_tsne[:, 1], hue=iris.target) plt.title("Iris Dataset Visualization via t-SNE") plt.show() ``` 这里运用 Seaborn 结合 Matplotlib 展现出不同类别样本之间的相对位置差异。 --- #### 使用递归来构建树形结构动画效果 对于像二叉查找树这样的递归定义对象来说,制作相应的图形表示往往能极大提升初学者的学习效率[^1]。我们可以考虑结合 Python Turtle Graphics Library 制作此类教学材料。比如下述片段即为简单版本的节点渲染逻辑: ```python import turtle class TreeNode: def __init__(self, value=None): self.value = value self.left = None self.right = None def draw(self, turt, x, y, step): if not self.value is None: turt.penup(); turt.goto(x,y); turt.pendown(); turt.circle(20) turt.write(str(self.value), align='center', font=('Arial', 12)) if self.left != None: turt.penup(); turt.goto(x-step//2, y-50); turt.pendown(); turt.setheading(-90) self.left.draw(turt, x-step//2, y-100, step//2) if self.right != None: turt.penup(); turt.goto(x+step//2, y-50); turt.pendown(); turt.setheading(-90) self.right.draw(turt, x+step//2, y-100, step//2) root_node = TreeNode(10) root_node.left = TreeNode(5) root_node.right = TreeNode(15) screen = turtle.Screen() tree_drawer = turtle.Turtle() root_node.draw(tree_drawer, 0, 0, 200) turtle.done() ``` 该部分重点介绍了如何手动控制画布上的元素布局从而形成层次分明的效果。 ---
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uncle_ll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值