用Python将Keras深度学习模型部署为Web应用程序的示例分析

技术用Python将Keras深度学习模型部署为Web应用程序的示例分析用Python将Keras深度学习模型部署为Web应用程序的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有

用Python将Keras深度学习模型部署为Web应用程序的示例分析,很多新手对此不是很清楚。为了帮助大家解决这个问题,下面小编就为大家详细讲解一下。需要的人可以从中学习,希望你能有所收获。

建立一个伟大的机器学习项目是一回事,但归根结底,你希望别人看到你的努力。当然可以把整个项目放到GitHub上,但是你爷爷奶奶怎么看?我们想要的是将深度学习模型部署为世界上任何人都可以访问的网络应用程序。

在本文中,我们将看到如何编写一个Web应用程序,该应用程序使用经过训练的Keras递归神经网络,并允许用户生成新的专利摘要。这个项目是基于递归神经网络,但不需要知道如何创建RNN。

现在我们把它当成一个黑盒:我们按启动顺序操作,它输出一个全新的专利摘要,可以在浏览器中显示!

传统上,数据科学家将开发模型,而前端工程师将向世界展示它们。在这个项目中,我们必须扮演两个角色,并致力于网络开发(尽管几乎所有人都使用Python)。

该项目需要结合许多主题:

Flask:用Python创建一个基本的网络应用程序

Keras:部署一个训练有素的递归神经网络

使用Jinja模板库创建模板

编写网页的HTML和CSS

烧瓶:http://flask.pocoo.org/

http://keras.io/

https://www.w3schools.com/html/

CSS:https://www.w3schools.com/html/html_css.asp

最终结果是一个网络应用程序,允许用户使用经过训练的递归神经网络生成全新的专利摘要:

用Python将Keras深度学习模型部署为Web应用程序的示例分析

这个项目的完整代码可以在GitHub上找到。

https://github.com/WillKoehrsen/recurrent-neural-networks

方法

的目的是让Web应用程序尽快启动并运行。为此,我选择了Flask,它允许我们用Python编写应用程序。我不喜欢搞砸样式(这一点很明显),所以几乎所有的CSS都是复制粘贴的。

Keras团队的这篇文章(https://blog . Keras . io/building-a-simple-Keras-deep-learning-rest-API . html)对基础知识很有帮助,这篇文章也是很有用的指南。

总的来说,这个项目遵循我的设计原则:快速启动并运行prototype ——,根据需要复制粘贴,然后迭代,做出更好的产品。

00-1010用Python构建Web应用程序最快的方法是使用Flask。要制作我们自己的应用程序,我们可以使用以下内容:

fromflaskimportFlask

app=Flask(__name__)

@app.route('/')

defhello():

返回' h2不太多正在进行/h2 '

App.run(主机=' 0.0.0.0 ',端口=50000)如果您复制并粘贴此代码并运行它,您可以在localhost:50000上查看您的Web应用程序。当然,我们想做更多的事情,所以我们将使用稍微复杂一点的功能,它基本上可以做同样的工作:处理来自浏览器的请求,并以HTML形式提供一些内容。对于我们的主页,我们希望向用户显示一个表单来输入一些细节。

00-1010当用户到达应用程序的主页时,我们将向他们显示一个包含三个参数的表单,供您选择:

输入RNN或随机选择的开始顺序。

选择RNN预测的多样性。

选择RNN输出的字数

为了用Python构建一个表单,我们将使用wtforms。创建表单的代码是:

wtforms:https://wtforms.readth

edocs.io/

from wtforms import (Form, TextField, validators, SubmitField, 
DecimalField, IntegerField)
class ReusableForm(Form):
    """User entry form for entering specifics for generation"""
    # Starting seed
    seed = TextField("Enter a seed string or 'random':", validators=[
                     validators.InputRequired()])
    # Diversity of predictions
    diversity = DecimalField('Enter diversity:', default=0.8,
                             validators=[validators.InputRequired(),
                                         validators.NumberRange(min=0.5, max=5.0,
                                         message='Diversity must be between 0.5 and 5.')])
    # Number of words
    words = IntegerField('Enter number of words to generate:',
                         default=50, validators=[validators.InputRequired(),
                                                 validators.NumberRange(min=10, max=100, 
                                                 message='Number of words must be between 10 and 100')])
    # Submit button
    submit = SubmitField("Enter")

这将创建如下所示的表单(样式来自main.css):

用Python将Keras深度学习模型部署为Web应用程序的示例分析

validator代码确保用户输入正确的信息。例如,我们检查所有框是否都已填写,且其diversity介于0.5到5之间。必须满足这些条件才能接受该表格。

用Python将Keras深度学习模型部署为Web应用程序的示例分析

我们Flask实际提供表单的方式是使用模板。

模板

模板是一个包含基本框架的文档,我们需要用它来填充细节。对于Flask Web应用程序,我们可以使用Jinja模板库将Python代码传递到HTML文档。例如,在main函数中,我们将把表单的内容发送到一个名为index.html的文件.

  • Jinja模板库:http://jinja.pocoo.org/

from flask import render_template
# Home page
@app.route("/", methods=['GET', 'POST'])
def home():
    """Home page of app with form"""
    # Create form
    form = ReusableForm(request.form)
    # Send template information to index.html
    return render_template('index.html', form=form)

当用户到达主页时,我们的应用程序将提供index.html表格上的细节。该模板是一个简单的html框架,我们在其中使用{{variable}}语法引用python变量。

<!DOCTYPE html>
<html>
<head>
  <title>RNN Patent Writing</title>
  <link rel="stylesheet" href="/static/css/main.css">
  <link rel="shortcut icon" href="/static/images/lstm.ico">
  
</head>
<body>
  <div class="container">
    <h2>
      <center>Writing Novel Patent Abstracts with Recurrent Neural Networks</center>
    </h2>
    {% block content %}
    {% for message in form.seed.errors %}
    <div class="flash">{{ message }}</div>
    {% endfor %}
    {% for message in form.diversity.errors %}
    <div class="flash">{{ message }}</div>
    {% endfor %}
    {% for message in form.words.errors %}
    <div class="flash">{{ message }}</div>
    {% endfor %}
    <form method=post>
      {{ form.seed.label }}
      {{ form.seed }}
      {{ form.diversity.label }}
      {{ form.diversity }}
      {{ form.words.label }}
      {{ form.words }}
      {{ form.submit }}
    </form>
    {% endblock %}
  </div>
</body>
</html>

对于表单中的每个错误(那些无法验证的条目),对应的一个错误将闪烁。除此之外,此文件将显示上述表单。

当用户输入信息并点击submit(POST请求)时,如果信息是正确的,我们希望将输入转移到适当的函数,以使用经过训练的RNN进行预测。这意味着修改home()

from flask import request
# User defined utility functions
from utils import generate_random_start, generate_from_seed
# Home page
@app.route("/", methods=['GET', 'POST'])
def home():
    """Home page of app with form"""
    
    # Create form
    form = ReusableForm(request.form)
    # On form entry and all conditions met
    if request.method == 'POST' and form.validate():
        # Extract information
        seed = request.form['seed']
        diversity = float(request.form['diversity'])
        words = int(request.form['words'])
        # Generate a random sequence
        if seed == 'random':
            return render_template('random.html', 
                                   input=generate_random_start(model=model, 
                                                               graph=graph, 
                                                               new_words=words, 
                                                               diversity=diversity))
        # Generate starting from a seed sequence
        else:
            return render_template('seeded.html', 
                                   input=generate_from_seed(model=model, 
                                                            graph=graph, 
                                                            seed=seed, 
                                                            new_words=words, 
                                                            diversity=diversity))
    # Send template information to index.html
    return render_template('index.html', form=form)

现在,当用户点击submit并且信息正确时,根据输入的不同,输入将被发送到generate_random_startgenerate_from_seed。这些函数使用经过训练的Keras模型生成具有用户指定的diversitynum_words的新颖专利。这些函数的输出依次被发送到其中一个模板random.html或者seeded.html作为一个网页。

使用预先训练的Keras模型进行预测

模型参数是经过训练的Keras模型,加载如下:

from keras.models import load_model
import tensorflow as tf
def load_keras_model():
    """Load in the pre-trained model"""
    global model
    model = load_model('../models/train-embeddings-rnn.h6')
    # Required for model to work
    global graph
    graph = tf.get_default_graph()
    
load_keras_model()

tf.get_default_graph()是基于这个要点的一种解决方案。

我将不展示这两个util函数的全部内容(这里是代码),你需要理解的是它们使用经过训练的Keras模型以及参数,并对新的专利文摘进行预测。

这些函数都返回带有格式化HTML的Python字符串。该字符串被发送到另一个模板以呈现为网页。例如,generate_random_start返回格式为html,返回结果为random.html

<!DOCTYPE html>
<html>
<header>
    <title>Random Starting Abstract
    </title>
    <link rel="stylesheet" href="/static/css/main.css">
    <link rel="shortcut icon" href="/static/images/lstm.ico">
    <ul>
        <li><a href="/">Home</a></li>
    </ul>
</header>
<body>
    <div class="container">
        {% block content %}
        {{input|safe}}
        {% endblock %}
    </div>
</body>
</html>

这里我们再次使用Jinja模板引擎来显示格式化的HTML。因为Python字符串已经被格式化为HTML,我们所要做的就是使用{{input| safe}}(其中input是Python变量)来显示它。然后我们就可以在main.css设计这个页面的样式了, 和其他html模板一样。

输出量

generate_random_start选择一个随机的专利文摘作为开始序列,并根据该摘要进行预测。然后显示开始顺序,RNN生成的输出和实际输出:

用Python将Keras深度学习模型部署为Web应用程序的示例分析

该函数generate_from_seed采用用户提供的起始序列,然后使用经过训练的RNN对其进行构建。输出如下:

用Python将Keras深度学习模型部署为Web应用程序的示例分析

尽管结果并不总是完全正确,但它们确实表明递归神经网络已经学习了英语的基础知识。经过训练,可以预测前50个单词中的下一个单词,并掌握了如何撰写具有说服力的专利文摘!

根据预测的多样性,输出可能是完全随机的或循环的。

运行应用

要自己运行该应用程序,你所需要做的就是下载存储库,导航到该deployment目录并输入python run_keras_server.py。这将立即使Web应用程序在localhost:10000可用。

根据家庭WiFi的配置方式,你应该能够使用IP地址从网络上的任何计算机访问该应用程序。

下一步

你的个人计算机上运行的Web应用程序非常适合与朋友和家人共享。我绝对不建议你向家庭网络中的所有人开放此功能!为此,我们想要在AWS EC2实例上设置应用程序并将其提供给全世界(稍后发布)。

为了改善应用程序,我们可以(通过main.css)更改样式,并可能添加更多选项,例如选择经过预先训练的网络的功能。关于个人项目的伟大之处在于,你可以根据需要扩展它们。如果你想使用该应用程序,请下载代码并开始使用。

  • 代码下载:https://github.com/WillKoehrsen/recurrent-neural-networks

用Python将Keras深度学习模型部署为Web应用程序的示例分析

在本文中,我们看到了如何将训练有素的Keras深度学习模型部署为Web应用程序。这需要将多种不同的技术结合在一起,包括递归神经网络,Web应用程序,模板,HTML,CSS,当然还有Python。

虽然这只是一个基本的应用程序,但它表明你可以开始使用深度学习来构建web应用程序,而不需要花费太多的精力。

submit = SubmitField("Enter")

在训练模型中加载。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/102827.html

(0)

相关推荐

  • 美国独享服务器租用特点

    技术美国独享服务器租用特点与廉价的虚拟主机不同,美国独享服务器需要单个网站或网络所有者使用服务器资源。服务器资源(如硬件、软件和操作系统)受到用户的完全控制。此外,物理服务器通常安装在数据中心内。虽然很多用户为了节省成本

    礼包 2021年11月3日
  • 如何利用C++ OpenCV 实现从投影图像恢复仿射特性

    技术如何利用C++ OpenCV 实现从投影图像恢复仿射特性如何利用C++ OpenCV 实现从投影图像恢复仿射特性,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易

    攻略 2021年11月29日
  • Apache Shiro怎么入门

    技术Apache Shiro怎么入门今天就跟大家聊聊有关Apache Shiro怎么入门,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。项目权限 表Shiro与Sp

    攻略 2021年10月20日
  • maven如何打包zip包含bin下启动脚本

    技术maven如何打包zip包含bin下启动脚本这篇文章主要为大家展示了“maven如何打包zip包含bin下启动脚本”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“maven

    攻略 2021年10月31日
  • ibatis怎么多条件查询(ibatis优点)

    技术iBATIS发展方向的四个方面分别是什么这期内容当中小编将会给大家带来有关iBATIS发展方向的四个方面分别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。iBATIS发展方向

    攻略 2021年12月19日
  • 纯收入,农民纯收入性质怎么构成

    技术纯收入,农民纯收入性质怎么构成按性质首先将纯收人分为生产性纯收入和非生产性纯 收入,然后将生产性纯收入分为农业生产纯收入和非农业 生产纯收入纯收入。分析时应当注意以下问题:1.准确计算各个构成部分纯收入各个构成部分纯

    生活 2021年10月27日