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. element-ui使用el-tabs组件的时候浏览器直接卡死的问题

    遇到这个问题的原由是:本身自己项目的elementUI版本是2.0.11较低了,项目有个功能是自定义progress进度条颜色,无奈高版本的才有这个配置,所以就升级了elementUI,升级到了最高版 ...

  2. mysql 函数GROUP_CONCAT(temp.amount SEPARATOR ',')的用法

    mysql 函数GROUP_CONCAT(temp.amount SEPARATOR ',')的用法 使用场景:例如:想要查询用户的最喜欢购买的几种商品,这个时候就需要使用group_concat(字 ...

  3. CNN与图像应用

    一.图像识别与定位 0.Classification:C个类别 Input:Image Output:类别标签 Evaluation metric:准确率 1.Localization: Input: ...

  4. PHP之面试题总结

    总结一些面试题,有备无患,走起... 1.熟悉的 nosql 和 sql 有什么区别(优势,劣势) Memcache,Redis 都是内存数据库 redis是一个开源的支持多种数据类型的key=> ...

  5. 关于React中props与state的一知半解

    props props英文翻译是道具的意思,我个人理解为参数,如果我们将react组件看作是一个函数,那么props便是函数接收外部数据所使用的参数.props具有以下特性: 1.不可变(只读性) p ...

  6. mariadb主从架构

    mariadb主从架构(异步)和集群 一般应用的场所是网站,主的机器是可以写可以读,从的机器可以读,也可以写,但不会同步.只有主的机器增删改,从的机器才会同步. 主从至少三个线程:dump.I/O t ...

  7. gd_t结构 bd_t结构

    gd_t在u-boot-2018.07-fmxx/include/asm-generic/global_data.h中定义 typedef struct global_data {    bd_t * ...

  8. Java基本的程序结构设计 数组

    声明数组: int[] a; int a[]; 两种方式.一般选择第一种,比较一目了然. 初始化,必须指定长度: int[] a = new int[10]; int[] a = {1,2,3}; 初 ...

  9. SpringBoot 1.x 之入门

    1 SpringBoot简介 SpringBoot简化Spring应用开发,约定大于配置,去繁从简,just run就能创建一个独立的,产品级别的应用. 背景: J2EE笨重的开发.繁多的配置.低下的 ...

  10. Tronado【第2篇】:tronado自定义Form组件

    Tronado自定义Form组件 一.获取类里面的静态属性以及动态属性的方法 方式一: # ===========方式一================ class Foo(object): user ...