pytorch seq2seq模型示例
以下代码可以让你更加熟悉seq2seq模型机制
"""
test
"""
import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
from torch.autograd import Variable # 创建字典
seq_data = [['man', 'women'], ['black', 'white'], ['king', 'queen'], ['girl', 'boy'], ['up', 'down'], ['high', 'low']]
char_arr = [c for c in 'SEPabcdefghijklmnopqrstuvwxyz']
num_dict = {n:i for i,n in enumerate(char_arr)} # 网络参数
n_step = 5
n_hidden = 128
n_class = len(num_dict)
batch_size = len(seq_data) # 准备数据
def make_batch(seq_data):
input_batch, output_batch, target_batch =[], [], [] for seq in seq_data:
for i in range(2):
seq[i] = seq[i] + 'P' * (n_step-len(seq[i]))
input = [num_dict[n] for n in seq[0]]
ouput = [num_dict[n] for n in ('S'+ seq[1])]
target = [num_dict[n] for n in (seq[1]) + 'E'] input_batch.append(np.eye(n_class)[input])
output_batch.append(np.eye(n_class)[ouput])
target_batch.append(target) return Variable(torch.Tensor(input_batch)), Variable(torch.Tensor(output_batch)), Variable(torch.LongTensor(target_batch)) input_batch, output_batch, target_batch = make_batch(seq_data) # 创建网络
class Seq2Seq(nn.Module):
"""
要点:
1.该网络包含一个encoder和一个decoder,使用的RNN的结构相同,最后使用全连接接预测结果
2.RNN网络结构要熟知
3.seq2seq的精髓:encoder层生成的参数作为decoder层的输入
"""
def __init__(self):
super().__init__()
# 此处的input_size是每一个节点可接纳的状态,hidden_size是隐藏节点的维度
self.enc = nn.RNN(input_size=n_class, hidden_size=n_hidden, dropout=0.5)
self.dec = nn.RNN(input_size=n_class, hidden_size=n_hidden, dropout=0.5)
self.fc = nn.Linear(n_hidden, n_class) def forward(self, enc_input, enc_hidden, dec_input):
# RNN要求输入:(seq_len, batch_size, n_class),这里需要转置一下
enc_input = enc_input.transpose(0,1)
dec_input = dec_input.transpose(0,1)
_, enc_states = self.enc(enc_input, enc_hidden)
outputs, _ = self.dec(dec_input, enc_states)
pred = self.fc(outputs) return pred # training
model = Seq2Seq()
loss_fun = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001) for epoch in range(5000):
hidden = Variable(torch.zeros(1, batch_size, n_hidden)) optimizer.zero_grad()
pred = model(input_batch, hidden, output_batch)
pred = pred.transpose(0, 1)
loss = 0
for i in range(len(seq_data)):
temp = pred[i]
tar = target_batch[i]
loss += loss_fun(pred[i], target_batch[i])
if (epoch + 1) % 1000 == 0:
print('Epoch: %d Cost: %f' % (epoch + 1, loss))
loss.backward()
optimizer.step() # 测试
def translate(word):
input_batch, output_batch, _ = make_batch([[word, 'P' * len(word)]])
# hidden 形状 (1, 1, n_class)
hidden = Variable(torch.zeros(1, 1, n_hidden))
# output 形状(6,1, n_class)
output = model(input_batch, hidden, output_batch)
predict = output.data.max(2, keepdim=True)[1]
decoded = [char_arr[i] for i in predict]
end = decoded.index('E')
translated = ''.join(decoded[:end]) return translated.replace('P', '') print('girl ->', translate('girl'))
参考:https://blog.csdn.net/weixin_43632501/article/details/98525673
pytorch seq2seq模型示例的更多相关文章
- pytorch seq2seq模型中加入teacher_forcing机制
在循环内加的teacher forcing机制,这种为目标确定的时候,可以这样加. 目标不确定,需要在循环外加. decoder.py 中的修改 """ 实现解码器 &q ...
- pytorch seq2seq模型训练测试
num_sequence.py """ 数字序列化方法 """ class NumSequence: """ ...
- PyTorch专栏(六): 混合前端的seq2seq模型部署
欢迎关注磐创博客资源汇总站: http://docs.panchuang.net/ 欢迎关注PyTorch官方中文教程站: http://pytorch.panchuang.net/ 专栏目录: 第一 ...
- 混合前端seq2seq模型部署
混合前端seq2seq模型部署 本文介绍,如何将seq2seq模型转换为PyTorch可用的前端混合Torch脚本.要转换的模型来自于聊天机器人教程Chatbot tutorial. 1.混合前端 在 ...
- 时间序列深度学习:seq2seq 模型预测太阳黑子
目录 时间序列深度学习:seq2seq 模型预测太阳黑子 学习路线 商业中的时间序列深度学习 商业中应用时间序列深度学习 深度学习时间序列预测:使用 keras 预测太阳黑子 递归神经网络 设置.预处 ...
- seq2seq模型详解及对比(CNN,RNN,Transformer)
一,概述 在自然语言生成的任务中,大部分是基于seq2seq模型实现的(除此之外,还有语言模型,GAN等也能做文本生成),例如生成式对话,机器翻译,文本摘要等等,seq2seq模型是由encoder, ...
- PyTorch 自动微分示例
PyTorch 自动微分示例 autograd 包是 PyTorch 中所有神经网络的核心.首先简要地介绍,然后训练第一个神经网络.autograd 软件包为 Tensors 上的所有算子提供自动微分 ...
- pytorch生成对抗示例
pytorch生成对抗示例 本文对ML(机器学习)模型的安全漏洞的认识,并将深入了解对抗性机器学习的热门话题.图像添加难以察觉的扰动会导致模型性能大不相同.通过图像分类器上的示例探讨该主题.使用第一种 ...
- [炼丹术]使用Pytorch搭建模型的步骤及教程
使用Pytorch搭建模型的步骤及教程 我们知道,模型有一个特定的生命周期,了解这个为数据集建模和理解 PyTorch API 提供了指导方向.我们可以根据生命周期的每一个步骤进行设计和优化,同时更加 ...
随机推荐
- window下使用curl操作elasticsearch
1.下载curlzip,https://curl.haxx.se/download.html; 2.解压,在bin文件夹中找到curl.exe,右键“以管理员身份运行”,cmd e: 换盘符:出现E: ...
- SoapException: Timed out while processing web services request
情形:动态调用WebService时,语句method.Invoke异常. 异常信息为调用目标发生异常,从异常信息并不能看出问题所在,需要查看InnerException,如标题所述:处理web请求超 ...
- vb Replace 实现
今天改一个VB程序时发现程序自带的replace 函数不知什么原因竟然不好用了 所以就自己写了一个玩玩 记录一下 'XGZ '替换字符 Private Function Replace1(ByVal ...
- 等待唤醒机制---Day25
线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同. 比如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B处理的动作,一个 是生产,一个 ...
- 开发--CentOS-7安装及配置
开发|CentOS-7安装及配置 本文主要进行详细讲解CentOS7.5系统的安装过程,以及CentOS系统初始化技术.我并不想将这篇文章变成一个教程,尽管我将详细的进行每一步的讲解,enjoy! 前 ...
- laravel框架之状态更改
//表单@if($v['sex']==0) <td class="se" ss="{{$v['sex']}}" id="{{$v['id']}} ...
- Gin-Go学习笔记六:Gin-Web框架 Api的编写
Api编写 1> Gin框架的Api返回的数据格式有json,xml,yaml这三种格式.其中yaml这种格式是一种特殊的数据格式.(本人暂时没有实现获取节点值得操作) 2> ...
- service---七月十九号实验
目录 service---七月十九号实验 1 startService.bindService 2 分析生命周期变化 问题思考: service---七月十九号实验 1 startService.bi ...
- 将qemu使用的设备树dump出来
像下面的qemu启动命令: sudo qemu-system-aarch64 \ -M virt \ -cpu cortex-a53 \ -smp \ -m 4096M \ -kernel ./lin ...
- TCP 通信时序及状态变迁
TCP 通信时序及状态变迁 参考链接: https://www.cnblogs.com/boxker/p/11214886.html https://blog.csdn.net/miss_ruoche ...