LSTM

看了官方lstm以及相关原理,然后自己按照理解写了一遍,然后在网上看到cos预测sin问题,然后用lstm完成了建模。

看到好多论文里图像文本特征用lstm的,对学ocr有点帮助。

官方lstm例子

给定句子对句子里的词进行词性分类。

'''
@Descripttion: This is Aoru Xue's demo,which is only for reference
@version:
@Author: Aoru Xue
@Date: 2019-08-17 21:58:08
@LastEditors: Aoru Xue
@LastEditTime: 2019-08-26 13:34:22
'''
import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F training_data = [
("The dog ate the apple".split(), ["DET", "NN", "V", "DET", "NN"]),
("Everybody read that book".split(), ["NN", "V", "DET", "NN"])
]
words_set = list(set([word for data in training_data for word in data[0]]))
def word2idx(word):
return words_set.index(word)
def target2idx(target):
dic = {"NN":0,"DET":1,"V":2}
return dic[target]
def get_training_idx(training_data):
idxs = []
for words,targets in training_data:
idxs.append((torch.tensor([word2idx(word) for word in words],dtype = torch.long),
torch.tensor([target2idx(target) for target in targets])))
return idxs
class LSTMTagger(nn.Module):
def __init__(self,hidden_dim,vocab_size,embedding_dim,tag_dim):
super(LSTMTagger,self).__init__()
self.embedding_dim = embedding_dim
self.tag_dim = tag_dim
self.words_embeddings = nn.Embedding(vocab_size,embedding_dim)
self.lstm = nn.LSTM(embedding_dim,hidden_dim)
self.hidden2tag = nn.Linear(hidden_dim,tag_dim)
def forward(self,x):
# x (len(wods),)
x = self.words_embeddings(x) # (len(words),embedding_dim)
x, _ = self.lstm(x.view(1,-1,self.embedding_dim)) # 默认batch_size 为1 是 (len(words),onehotdim).其实应该是(batch_size,len(words),onehotdim)
x = self.hidden2tag(x) # (1,len(words),tag_dim)
return x.view((-1,self.tag_dim))
if __name__ == "__main__":
train_data = get_training_idx(training_data)
model = LSTMTagger(hidden_dim = 64,vocab_size = len(words_set),embedding_dim = 32,tag_dim =3)
loss_fn = nn.NLLLoss()
optimizer = optim.SGD(model.parameters(),lr = 0.1)
losses = []
for epoch in range(300):
for sentence,target in train_data:
model.zero_grad()
out = model(sentence)
loss = loss_fn(out,target)
losses.append(loss.item())
loss.backward()
optimizer.step() with torch.no_grad(): for sentence,target in train_data:
print(torch.argmax(model(sentence),dim = 1),target) '''
[Running] set PYTHONIOENCODING=utf-8 && /home/xueaoru/.conda/envs/pytorch/bin/python -u "/home/xueaoru/文档/codes/LSTM.py"
tensor([1, 0, 2, 1, 0]) tensor([1, 0, 2, 1, 0])
tensor([0, 2, 1, 0]) tensor([0, 2, 1, 0])
'''

cos预测sin

cos值与sin值是多对多的关系,直接随便用一个nn无法完成建模,需要考虑前后数据关系来建模。

即由前面输入的数据的cos数据来确定该处sin值应该是多少。

训练感觉好慢。将近两分钟。

建模代码如下:

'''
@Descripttion: This is Aoru Xue's demo,which is only for reference
@version:
@Author: Aoru Xue
@Date: 2019-08-26 16:22:36
@LastEditors: Aoru Xue
@LastEditTime: 2019-08-26 17:05:54
'''
import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F raw_inputs = torch.tensor([i*np.pi / 20 for i in range(1000)],dtype = torch.float)
cosx =torch.cos(raw_inputs)
sinx = torch.sin(raw_inputs) class RNNModule(nn.Module):
def __init__(self,hidden2):
super(RNNModule,self).__init__()
self.lstm = nn.LSTM(1,hidden2)
self.flatten = nn.Linear(hidden2,1)
def forward(self,x):
x = x.view((-1,1,1))
x,_ = self.lstm(x) x = self.flatten(x)
return x.view((1,-1))
if __name__ == "__main__":
model = RNNModule(16)
xs = [x*np.pi / 20 for x in range(0,2000)]
optimizer = optim.Adam(model.parameters())
loss_fn = nn.MSELoss()
for epoch in range(100):
for i in range(0,1000 - 20):
model.zero_grad()
cos_x = torch.cos(torch.tensor(xs[i:i+20],dtype = torch.float))
out = model(cos_x)
sin_x = torch.sin(torch.tensor(xs[i:i+20],dtype = torch.float))
loss = loss_fn(out,sin_x.view(1,-1))
loss.backward()
optimizer.step()
with torch.no_grad():
x = cosx[0:20]
output = model(x)
print(output,sinx[0:20]) '''
tensor([[-0.0167, 0.0853, 0.2704, 0.4169, 0.5790, 0.7059, 0.8086, 0.9002,
0.9675, 0.9988, 1.0050, 0.9896, 0.9524, 0.8948, 0.8171, 0.7172,
0.5929, 0.4554, 0.3129, 0.1634]]) tensor([0.0000, 0.1564, 0.3090, 0.4540, 0.5878, 0.7071, 0.8090, 0.8910, 0.9511,
0.9877, 1.0000, 0.9877, 0.9511, 0.8910, 0.8090, 0.7071, 0.5878, 0.4540,
0.3090, 0.1564]) '''

[NLP] nlp-lstm-cos -> sin的更多相关文章

  1. Ubuntu下使用gcc编译c文件,未识别cos,sin

    Ubuntu下使用gcc编译c文件,虽然我调用了math.h的头文件,但是未识别cos,sin 报错:( fft.c ) /tmp/ccwXjD8C.o: In function `fft': fft ...

  2. tflearn tensorflow LSTM predict sin function

    from __future__ import division, print_function, absolute_import import tflearn import numpy as np i ...

  3. NLP与深度学习(四)Transformer模型

    1. Transformer模型 在Attention机制被提出后的第3年,2017年又有一篇影响力巨大的论文由Google提出,它就是著名的Attention Is All You Need[1]. ...

  4. 关于nlp的一些探索

    深度学习,知识图谱,nlp学习经历                          获取信息来源:英文paper研读,吴恩达公开课,Hiton公开课,北大nlp教材,英文最新学术论文,中科院院士技术 ...

  5. 自然语言处理(nlp)比计算机视觉(cv)发展缓慢,而且更难!

    https://mp.weixin.qq.com/s/kWw0xce4kdCx62AflY6AzQ 1.  抢跑的nlp nlp发展的历史非常早,因为人从计算机发明开始,就有对语言处理的需求.各种字符 ...

  6. 【NLP CS224N笔记】Lecture 1 - Introduction of NLP

    I. 什么是NLP NLP全称是Natural Language Processing,即自然语言处理,这是一门计算机科学.人工智能以及语言学的交叉学科. NLP涉及的几个层次由下图所示.可以看到输入 ...

  7. 常用数学函数篇abs acos asin atan ceil cos exp frexp ldexp log pow sin sinh sqrt tan tanh

    abs(计算整型数的绝对值) 相关函数 labs, fabs 表头文件 #include<stdlib.h> 定义函数 int abs (int j) 函数说明 abs()用来计算参数j的 ...

  8. 数学中的Sin和Cos是什么意思?(转)

    数学中的Sin和Cos是什么意思? 作者:admin 分类:生活随笔 发表于 2012年03月21日 16:48 问:数学中的Sin和Cos是什么意思? 答:sin, cos, tan 都是三角函数, ...

  9. 正割、余割、正弦、余弦、正切、余切之间的关系的公式 sec、csc与sin、cos、tan、cot之间的各种公式

    1.倒数关系 tanα ·cotα=1 sinα ·cscα=1 cosα ·secα=1 2.商数关系 tanα=sinα/cosα cotα=cosα/sinα 3.平方关系 sinα²+cosα ...

  10. NLP第一周

    19-21周,每周学习15小时以上 基础:Python编程基础:基础的概览统计.了解线性代数:足够的时间投入. 完成9个课程项目,每个5小时-15小时 完成聊天机器人项目(40-80小时) Capst ...

随机推荐

  1. JavaEE--JSP详解

    一.JSP JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导.许多公司参与一起建立的一种 ...

  2. node.js使用express模块创建web服务器应用

    1.安装express模块 在命令行输入 npm install body-parser --save npm install express --save 2.创建app.js文件 /*应用程序入口 ...

  3. PHP trait与单例模式 (一次编写,到处使用)

    一  trait php是单继承的语言,无法同时从两个基类中继承属性和方法,为了解决这个问题,php出了Trait这个特性. 个人理解的trait是: trait = abstract class - ...

  4. ftp建立虚拟用户实现文件上传和下载

    环境 centos7 1.开启vsftpd服务 2.检查vsftpd服务是否开启 3.添加虚拟用户口令文件 vi etc/vsftpd/vuser.txt 4.生成虚拟用户口令认证文件 如果没有db_ ...

  5. 自动化监控软件之zabbix安装

    自动化监控系统 cacti : 基于snmp(简单的网络管理协议)协议的监控软件,强大的绘图软件 缺点: 自带的监控模板比较少,不能默认 自带监控报警功能(只能自己去官网下载模板) Nagios: 插 ...

  6. 牛客练习赛26 D xor序列 (线性基)

    链接:https://ac.nowcoder.com/acm/contest/180/D 来源:牛客网 xor序列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他 ...

  7. zencart前台小语种后台英文 导入批量表 前后台不显示产品的问题

    admin\includes\init_includes\init_languages.php 前台小语种后台英文导致批量表导入后,前后台不显示产品的问题将红色部分修改成前台语言对应的值,前台语言对应 ...

  8. Python socket服务

    套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开.读写和关闭等操作. 1. 实现客户端发送字符,服务器返回大写的字符: 服务器: import soc ...

  9. 浅谈redis分布式锁用法

    使用redis的setnx命令进行实现 @Component @Slf4j public class RedisLock { @Autowired private StringRedisTemplat ...

  10. 负载均衡(三)Nginx的安装配置

    linux系统为Centos 64位 一.安装 [root@cuiqq local]# mkdir /usr/local/nginx [root@cuiqq local]# cd /usr/local ...