Pytorch:使用混合前端部署seq2seq模型

在后一种情况下,您可以参考原始的Chatbot教程,了解有关数据预处理、模型理论和定义以及模型培训的详细信息。
本教程将从序列到序列模型到TORCH脚本的转换过程,我们将从chatbot教程转换为chatbot模型。
您可以将本教程作为一个“第2部分”到chatbot教程,并部署您自己的预培训模型,
或者您可以从本文档开始并使用预培训的模型。在后一种情况下,您可以参考原始的Chatbot教程,
了解有关数据预处理、模型理论和定义以及模型培训的详细信息。

什么是混合前端?在基于深度学习的项目的研究和开发阶段,它有利于与一个渴望的、
命令式的界面进行交互,如pytorch。这使用户能够编写熟悉的、惯用的python,
允许使用python数据结构、控制流操作、打印语句和调试使用。
到了在生产环境中部署模型的时候了,有一个基于图形的模型表示是非常有益的。
延迟的图表示允许优化,例如无序执行,以及针对高度优化的硬件体系结构的能力。
此外,基于图形的表示允许框架无关的模型导出。pytorch提供了将急切模式代码增量
转换为TORCH脚本的机制,这是TORCH用于静态分析和优化的python的子集。
表示独立于python运行时的深度学习程序。在torch.jit模块中找到了将急切模式的
pytorch程序转换为TORCH脚本的API。该模块有两种核心模式,用于将急切模式模型
转换为torch脚本图形表示:跟踪和脚本。torch.jit.trace函数接受一个模块或函数
和一组示例输入。然后,它通过函数或模块运行示例输入。当跟踪所遇到的计算步骤,
并输出执行跟踪操作的基于图的函数时,跟踪对于不涉及数据依赖控制流的简单模块
和函数(例如标准卷积神经网络)是很好的。但是,如果跟踪一个与数据相关的if语句和循环的函数,
则只记录由示例输入沿着执行路径调用的操作。换句话说,要转换包含数据依赖的控制流的模块和函数,
提供一种脚本机制。脚本显式地将模块或函数代码转换为torch脚本,包括所有可能的控制流路由。
要使用脚本模式,请确保继承torch.jit.scriptModule基类(而不是torch.nn.Module),
并将torch.jit.script装饰器添加到python函数或torch.jit.script_方法装饰器到您的
python函数中或将torch.jit.script装饰器添加到您的python函数中。模块的方法。
使用脚本的一个注意事项是它只支持有限的python子集。有关支持的特性的所有细节,
请参阅torch脚本语言引用。为了提供最大的灵活性,可以组合TORCH脚本的模式来表示整个程序,这些技术可以逐步应用。

本教程的灵感来源如下:元贵吴的py手电筒-chatbot实现:https:/github.com/ywk 991112/py手电筒-chatbot Sean Robertson的实用-py手电seq2seq-翻译示例:
https:/github.com/spro/实用型-吡传/树/主/seq2seq-翻译浮子中心的康奈尔电影预处理代码:
https:/github.com/flydhub/textutil-预处理-康奈尔-电影-语料库

准备环境首先,我们将导入所需的模块并设置一些常量。如果您计划使用自己的模型,
请确保max_Length常量被正确设置。作为提醒,该常量定义了训练期间允许的最大句子长度和模型能够产生的最大长度输出。
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

import torch
import torch.nn as nn
import torch.nn.functional as F
import re
import os
import unicodedata
import numpy as np

device = torch.device("cpu")


MAX_LENGTH = 10  # 最大句子长度

# 默认字标记
PAD_token = 0  # 用于填充短句
SOS_token = 1  # 句首标记
EOS_token = 2  # 句尾标记
#正如前面提到的模型概述,我们使用的模型是序列到序列(Seq2seq)模型。
# 这种模型用于输入是可变长度序列的情况下,我们的输出也是可变长度序列,
# 不一定是输入的一对一映射。seq2seq模型由两个协作工作的递归神经网络(Rnns)组成:编码器和解码器。

 

你可能感兴趣的:(深度学习,人工智能)