快速搭建机器学习demo: gradio教程

news2024/10/5 14:38:16

1. Intro

gradio是一个能够快速建立机器学习demo web应用的工具,仅需简单的几行代码就能构建机器学习模型的可视化交互demo,并分享给你的朋友使用。

与gradio相同功能的竞品有Streamlit,相比Gradio,Streamlit相对复杂,完全熟练使用需要一定时间。

2. quick start

如下展示了一个简单的case,其他所有的case都可套用该模板

import gradio as gr

# 定义处理函数/模型推理
def greet(name):
    return "Hello " + name + "!"

# interface中三个必要参数: 推理函数、输入、输出
demo = gr.Interface(fn=greet, inputs="text", outputs="text")
# 是否开启公网分享
demo.launch(share=False)

可得到如下的界面
在这里插入图片描述

3. 基础组件

3.1 应用界面

  • 简易界面通常使用 gr.Interface(fn, inputs, outputs, ···)
    • fn 是一个包装函数,通常为机器学习模型的推理部分
    • inputs 输入,通常是gradio的组件,如gr.Image(), 对于文本、图片等简单类型可直接写成[“text”, “image”]
    • outputs 输出,同输入
  • 定制化场景通常使用 gr.Blocks()
    block一般应用在定制化的复杂场景,可以自己定义很多模块,进行组合,后面会做详细介绍

3.2 输入输出组件

  • 图像 gr.Image(value, label, show_label)
    • value: 输入的图像,支持pil, np_array, path, url等格式
    • label: 组件名称
    • show_label: 是否展示组件名称
  • 文本 gradio.Textbox(value, lines, placeholder, show_copy_button)
    • value: 输入文本
    • lines: 文本框最少展示行数
    • placeholder: 一般用作提示语
    • show_copy_button: 是否展示复制按钮
  • 数字 gr.Number(choices, value, label)
  • 数据框 gr.DataFrame()
  • 下拉选项 gr.Dropdown()
  • markdown gr.Markdown()
  • 文件 gr.Files()
  • 调节带 gradio.Slider(···)
  • 单选 gradio.Radio(choices, value, label)
    • choice: 选择项list
    • value: 默认选定值
    • label: 组件名称

3.3 触发组件

  • 按钮组件:gradio.Button(value)
    • value: 按钮的名称
    • 通常和click组件联合使用 gradio.Button.click(fn, inputs, outputs)
  • 清除按钮: gradio.ClearButton(components, value)
    • components: 要清除的组件
    • value: 按钮名称
    • 通常和gradio.ClearButton.add(components, ···)以及click()方法联合使用

3.4 布局组件

  • 标签页: gr.Tab()
  • 行布局: gradio.Row()
  • 列布局: gradio.Column()
  • 折叠项: gradio.Accordion(label, ···)

3.5 demo

这里我们使用Block和以上部分组件搭建了一个case

def chat(name,  lan, repeat=1, machine_name="小明"):
    if lan == "chinese":
        reply = "你好,"+name+",我叫"+machine_name
    elif lan == "english":
        reply = "hello, "+name+", my name is"+machine_name
    else:
        reply = "sorry I can't understand you"
    return_text = ""
    for i in range(repeat):
        return_text = return_text+reply+"\n"
    return  return_text

with gr.Blocks() as demo:
    gr.Markdown("# A English And Chinese ChatBot")
    gr.Markdown("</br>")
    with gr.Accordion("参数设置", open=False):
        with gr.Row():
            lan = gr.Radio(choices=["chinese", "english", "other"], value="english", label="语言")
            num = gr.Slider(minimum=1, maximum=10, value=1, label="重复次数", step=1)
            machin_name = gr.Dropdown(choices=["小明", "xiao ming", "小花", "small flower"], value="小花", label="机器人名字")
    with gr.Row():
        input_box = gr.Textbox(placeholder="please input your name", label="inputs", show_label=True, lines=8)
        out_box = gr.Textbox(label="outputs", show_label=True, lines=8)

    with gr.Row():
        btn = gr.Button(value="submit")
        btn.click(fn=chat, inputs=[input_box, lan, num, machin_name], outputs=out_box)
        clear_btn = gr.ClearButton(components=[input_box, out_box], value="clear")

demo.launch()

在这里插入图片描述
根据上面的组件你可以搭建一个80分的模型-用户交互界面了,如果你想把界面搭建的像前端页面一样优雅,继续查看第四章节的进阶组件

4. 进阶组件

  • gradio.HTML():可以写一些简单的html来使得整个界面更加优雅
  • gradio.Examples(examples, inputs, outputs):展示示例,通过点击示例快速查看结果
    • examples 列表,维度与输入一直
    • inputs 输入组件实例
    • ouputs 输出组件实例

进阶demo

import gradio as gr

def chat(name,  lan, repeat=1, machine_name="小明"):
    if lan == "chinese":
        reply = "你好,"+name+",我叫"+machine_name
    elif lan == "english":
        reply = "hello, "+name+", my name is"+machine_name
    else:
        reply = "sorry I can't understand you"
    return_text = ""
    for i in range(repeat):
        return_text = return_text+reply+"\n"
    return  return_text

html_str = """

    <h1 style='font-family: "Nunito",sans-serif; color: midnightblue !important; font-size: 2.1875rem;text-align: center !important;'>AI Content Generate Demo</h1>
    <h3 style='color: midnightblue !important; font-size: 1.1875rem;text-align: center !important;'> this is a demo that show the artificial intelligent generate content</h3>
"""
with gr.Blocks(title="Demo") as demo:
    with gr.Row():
        ht = gr.HTML(html_str, visible=True)
    with gr.Accordion("参数设置", open=False):
        with gr.Row():
            lan = gr.Radio(choices=["chinese", "english", "other"], value="english", label="语言")
            num = gr.Slider(minimum=1, maximum=10, value=1, label="重复次数", step=1)
            machin_name = gr.Dropdown(choices=["小明", "xiao ming", "小花", "small flower"], value="小花", label="机器人名字")
    with gr.Row():
        input_box = gr.Textbox(placeholder="please input your name", label="inputs", show_label=True, lines=8)
        out_box = gr.Textbox(label="outputs", show_label=True, lines=8)

    with gr.Row():
        btn = gr.Button(value="submit")
        btn.click(fn=chat, inputs=[input_box, lan, num, machin_name], outputs=out_box)
        clear_btn = gr.ClearButton(components=[input_box, out_box], value="clear")

    with gr.Box():
        with gr.Column():
            gr.Markdown("""
            ## Text Examples
            ##### click the example to obtain result
            """)
            exp = gr.Examples(examples=["小明", "xiao red"], inputs=input_box, outputs=out_box)
            gr.Markdown("""
            # reference
            * [gradido官方文档](https://www.gradio.app/docs/examples)
            * [orangerfun的CSDN博客](https://blog.csdn.net/orangerfun?spm=1011.2415.3001.5343)
            """)

demo.launch()

结果如下所示
在这里插入图片描述

TODO

进阶将持续更新…

了解更多AI算法,关注微信公众号 funNLPer

参考

gradio doc 官方网站
Gradio入门到进阶全网最详细教程一:快速搭建AI算法可视化部署演示(侧重项目搭建和案例分享)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/768394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

热门二叉树面试题

606. 根据二叉树创建字符串 - 力扣&#xff08;LeetCode&#xff09; 给你二叉树的根节点 root &#xff0c;请你采用前序遍历的方式&#xff0c;将二叉树转化为一个由括号和整数组成的字符串&#xff0c;返回构造出的字符串。 空节点使用一对空括号对 "()" 表示&a…

Baichuan-13B:130亿参数的开源语言模型,引领中文和英文benchmark

Baichuan-13B: 一个强大的开源大规模语言模型 标题&#xff1a;Baichuan-13B&#xff1a;130亿参数的开源语言模型&#xff0c;引领中文和英文benchmark Baichuan-13B是由百川智能开发的一个开源大规模语言模型项目&#xff0c;包含了130亿参数。该模型在中文和英文的权威ben…

基于Nginx深入浅出亿级流量架构设计(更新至2023.7.18)

基于Nginx深入浅出亿级流量架构设计 环境准备/安装部署Nginx四个发行版本简单介绍Nginx的安装 Nginx的目录结构与基本运行原理及其最小配置解析Nginx虚拟主机与域名配置ServerName匹配规则反向代理在系统结构中的应用场景Nginx的反向代理配置基于反向代理的负载均衡器 环境准备…

自洽性改善语言模型中的思维链推理

自洽性改善语言模型中的思维链推理 摘要介绍对多样化路径的自洽实验实验设置主要结果当CoT影响效率时候&#xff0c;SC会有所帮助与现有方法进行比较附加研究 相关工作总结 原文&#xff1a; 摘要 本篇论文提出了一种新的编码策略——自洽性&#xff0c;来替换思维链中使用的…

【STM32】SPI屏幕刷图总结:GPIO模拟,硬件SPI,DMA+硬件SPI

文章目录 GPIO模拟SPI硬件SPI外设DMA硬件SPI外设总结 代码工程&#xff1a;https://github.com/liefyuan/stm32-spi-st7789-tft.git 前言 我的屏幕的分辨率是&#xff1a;240*320 驱动是&#xff1a;ST7789V 线驱动方式&#xff1a;四线SPI&#xff08;CS&#xff0c;DC&#…

206. 反转链表

给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&#xff1a; 输入&am…

PageObject+Python+Appium

目录 前言&#xff1a; 简介 功能 常用目录 配置 实例 - 第一次启动 app 实例 - 登录 代码入口实例 结果展示 前言&#xff1a; Page Object模式是一种常用的设计模式&#xff0c;用于组织和管理自动化测试脚本中的页面对象。它将页面的元素和操作封装在一个独立的类…

数据质量相关问题系列

数据质量问题是什么&#xff1f; 数据质量&#xff0c;是指在业务环境下&#xff0c;数据符合数据消费者的使用目的&#xff0c;能满足业务场景具体需求的程度。而数据质量问题是指数据集中存在无法容忍的缺陷&#xff0c;从而降低该数据的可靠性和可信度。简单理解就是数据很脏…

【JAVA】云HIS系统功能菜单知识(一)

一、云HIS特色 云HIS滚动消息栏&#xff1a;质控消息、住院时长、药库结转、患者入院、医嘱停止、新开医嘱、门诊用药不良、出院审核、药品调拨、排班提醒、药品库存、药品过期、药品临期等帮助医生、护士和相关管理人员实时接收院内消息并作出处理。 二、云HIS功能菜单 【预约…

【MySQL】MySQL事务保姆级教程(适合MySQL初学者学习)

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;重…

桥接模式——连接抽象维度和实现维度

桥接模式 bridge pattern 一 定义 桥接模式&#xff0c;是将抽象部分与它的具体实现部分分离&#xff0c;使它们都可以独立地变化。它是将两个不同的维度建立联系。这两个维度通常是指&#xff1a;抽象维度和实现维度。 使用场景 在抽象和具体实现之间需要增加更多的灵活性…

找不到dll的问题解决,loadlibrary 126错误

症状&#xff1a;loadlibrary时&#xff0c;getlasterror返回126&#xff0c;表示是找不到模块错误。来到目录下看到依赖所需的dll均存在 解决办法&#xff1a; 1.下载ProcmonProcmom-监视进程所有的动作资源-CSDN文库https://download.csdn.net/download/gergul/880597622.运…

RocketMQ第四节(部署模式、监控面板等)

1&#xff1a;mq的部署模式 部署方式 | RocketMQ 参考官网。 单机模式&#xff1a;抗风险能力差&#xff0c;单机挂机没服务&#xff0c;单机硬盘损坏&#xff0c;丢失数据 多机&#xff08;多master没有Slave副本&#xff09;: 多个master采用RAID10磁盘&#xff0c;不会丢…

[java安全]类加载器CommonsCollections3

文章目录 【java安全】类加载器&CommonsCollections3前言java类加载器URLClassLoader利用ClassLoader#defineClass()直接加载字节码 使用TemplatesImpl加载字节码TemplatesImpl中字节码实现AbstractTranslet类 构造未完成POCTrAXFilter类调用newTransformer()InstantiateTr…

【AI绘画Stable Diffusion】高清图像放大+面部修复+一键抠图,谈谈你可能不知道的优化技巧!

一提起后期处理&#xff0c;我猜你可能立马想到的就是图像放大。 今天&#xff0c;我要向你展示的后期处理手法&#xff0c;以及优化技巧。 图片放大算法 如果你常用的是秋叶大佬的整合包&#xff0c;那么你对"R-ESRGAN 4x"和"R-ESRGAN 4x Anime6B"应该…

FPGA单端口RAM——IP核

文章目录 前言一、RAM简介1、随机存储器IP核分类1、RAM IP核2、ROM IP核 2、RAM IP核 二、IP核配置步骤三、源码1、ram_rw驱动文件2、ip_1port_ram顶层文件3、仿真文件4、仿真波形 四、SignalTap II在线调试五、总结六、参考资料 前言 环境&#xff1a; 1、Quartus18.1 2、vsco…

Leetcode-每日一题【1019.链表中的下一个更大结点】

题目 给定一个长度为 n 的链表 head 对于列表中的每个节点&#xff0c;查找下一个 更大节点 的值。也就是说&#xff0c;对于每个节点&#xff0c;找到它旁边的第一个节点的值&#xff0c;这个节点的值 严格大于 它的值。 返回一个整数数组 answer &#xff0c;其中 answer[…

Servlet的监听器

Servlet常用的监听器 ServletContextAttributeListener 用来感知ServlerContext对象属性变化&#xff0c;比如添加或删除属性变化 ServletContextListener 用来感知ServlerContext对象的创建和销毁的 ServletRequestListener 可以用来监听感知ServletRequest对象的创建和销毁的…

大语言模型(LLM)评估综述

论文地址&#xff1a;https://arxiv.org/abs/2307.03109 Github地址&#xff1a;https://github.com/MLGroupJLU/LLM-eval-survey 一 、背景 随着ChatGPT和GPT-4的推出&#xff0c;大型语言模型&#xff08;LLM&#xff09;在学术界和工业界的热度日益升高&#xff0c;这主要…

优雅的设计测试用例

⭐️前言⭐️ 入职以后接触到了公司的具体业务&#xff0c;提升了设计测试用例的能力&#xff0c;于是沉淀出这篇文档与大家分享。 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主将持续更新学习记录收获&…