[NLP] nlp-lstm-cos -> sin
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的更多相关文章
- Ubuntu下使用gcc编译c文件,未识别cos,sin
Ubuntu下使用gcc编译c文件,虽然我调用了math.h的头文件,但是未识别cos,sin 报错:( fft.c ) /tmp/ccwXjD8C.o: In function `fft': fft ...
- tflearn tensorflow LSTM predict sin function
from __future__ import division, print_function, absolute_import import tflearn import numpy as np i ...
- NLP与深度学习(四)Transformer模型
1. Transformer模型 在Attention机制被提出后的第3年,2017年又有一篇影响力巨大的论文由Google提出,它就是著名的Attention Is All You Need[1]. ...
- 关于nlp的一些探索
深度学习,知识图谱,nlp学习经历 获取信息来源:英文paper研读,吴恩达公开课,Hiton公开课,北大nlp教材,英文最新学术论文,中科院院士技术 ...
- 自然语言处理(nlp)比计算机视觉(cv)发展缓慢,而且更难!
https://mp.weixin.qq.com/s/kWw0xce4kdCx62AflY6AzQ 1. 抢跑的nlp nlp发展的历史非常早,因为人从计算机发明开始,就有对语言处理的需求.各种字符 ...
- 【NLP CS224N笔记】Lecture 1 - Introduction of NLP
I. 什么是NLP NLP全称是Natural Language Processing,即自然语言处理,这是一门计算机科学.人工智能以及语言学的交叉学科. NLP涉及的几个层次由下图所示.可以看到输入 ...
- 常用数学函数篇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的 ...
- 数学中的Sin和Cos是什么意思?(转)
数学中的Sin和Cos是什么意思? 作者:admin 分类:生活随笔 发表于 2012年03月21日 16:48 问:数学中的Sin和Cos是什么意思? 答:sin, cos, tan 都是三角函数, ...
- 正割、余割、正弦、余弦、正切、余切之间的关系的公式 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α ...
- NLP第一周
19-21周,每周学习15小时以上 基础:Python编程基础:基础的概览统计.了解线性代数:足够的时间投入. 完成9个课程项目,每个5小时-15小时 完成聊天机器人项目(40-80小时) Capst ...
随机推荐
- element-ui使用el-tabs组件的时候浏览器直接卡死的问题
遇到这个问题的原由是:本身自己项目的elementUI版本是2.0.11较低了,项目有个功能是自定义progress进度条颜色,无奈高版本的才有这个配置,所以就升级了elementUI,升级到了最高版 ...
- mysql 函数GROUP_CONCAT(temp.amount SEPARATOR ',')的用法
mysql 函数GROUP_CONCAT(temp.amount SEPARATOR ',')的用法 使用场景:例如:想要查询用户的最喜欢购买的几种商品,这个时候就需要使用group_concat(字 ...
- CNN与图像应用
一.图像识别与定位 0.Classification:C个类别 Input:Image Output:类别标签 Evaluation metric:准确率 1.Localization: Input: ...
- PHP之面试题总结
总结一些面试题,有备无患,走起... 1.熟悉的 nosql 和 sql 有什么区别(优势,劣势) Memcache,Redis 都是内存数据库 redis是一个开源的支持多种数据类型的key=> ...
- 关于React中props与state的一知半解
props props英文翻译是道具的意思,我个人理解为参数,如果我们将react组件看作是一个函数,那么props便是函数接收外部数据所使用的参数.props具有以下特性: 1.不可变(只读性) p ...
- mariadb主从架构
mariadb主从架构(异步)和集群 一般应用的场所是网站,主的机器是可以写可以读,从的机器可以读,也可以写,但不会同步.只有主的机器增删改,从的机器才会同步. 主从至少三个线程:dump.I/O t ...
- gd_t结构 bd_t结构
gd_t在u-boot-2018.07-fmxx/include/asm-generic/global_data.h中定义 typedef struct global_data { bd_t * ...
- Java基本的程序结构设计 数组
声明数组: int[] a; int a[]; 两种方式.一般选择第一种,比较一目了然. 初始化,必须指定长度: int[] a = new int[10]; int[] a = {1,2,3}; 初 ...
- SpringBoot 1.x 之入门
1 SpringBoot简介 SpringBoot简化Spring应用开发,约定大于配置,去繁从简,just run就能创建一个独立的,产品级别的应用. 背景: J2EE笨重的开发.繁多的配置.低下的 ...
- Tronado【第2篇】:tronado自定义Form组件
Tronado自定义Form组件 一.获取类里面的静态属性以及动态属性的方法 方式一: # ===========方式一================ class Foo(object): user ...