import numpy as np
import torch
import torch.nn as nn
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
x=np.arange(0,150.1,0.1).tolist()
#print(x.shape)
sin_y=np.sin(x)
cos_y=np.cos(x)
tan_y=np.tan(x)
y_set=np.array([sin_y,cos_y,cos_y])
#print(y_set[:,0])
x_test=[]
y_test=[]
for i in range(1000):
'''
建立训练集,x为sin_y、cos_y、tan_y构成的(50,3)的数组,y为下一个(比如x为i列到i+50列,y就是第i+51列)(1,3)的数组
'''
x_test.append(y_set[:,i:i+50].T.tolist())
y_test.append(y_set[:,i+51].tolist())
print(np.array(x_test))
print(np.array(x_test).shape)
print(np.array(y_test).shape)
np.random.seed(168)
np.random.shuffle(x_test)
np.random.seed(168)
np.random.shuffle(y_test)
x=torch.tensor(x_test).to(device)
y=torch.tensor(y_test).to(device)
epoch=10#训练10代
input_size=3#词向量的维度,即是(50,3)中的3
hidden_size=16#隐藏层维度
num_layers=7#层数
output_size=3#输出的维度,即是(1,3)中的3
batch_size=32#一次训练的样本数
class MyDataset():
def __init__(self, data):
self.data = data
def __getitem__(self, item):
return self.data[item]
def __len__(self):
return len(self.data)
class LSTM(nn.Module):
def __init__(self, ):
super().__init__()
self.input_size = input_size
self.hidden_size = hidden_size
self.num_layers = num_layers
self.output_size = output_size
self.num_directions = 1 # 单向LSTM
self.batch_size = batch_size
self.lstm = nn.LSTM(self.input_size, self.hidden_size, self.num_layers, batch_first=True)
self.linear = nn.Linear(self.hidden_size, self.output_size)
def forward(self, input_seq):
h_0 = torch.randn(self.num_directions * self.num_layers, self.batch_size, self.hidden_size).to(device)
c_0 = torch.randn(self.num_directions * self.num_layers, self.batch_size, self.hidden_size).to(device)
# output(batch_size, seq_len, num_directions * hidden_size)
output, _ = self.lstm(input_seq, (h_0, c_0)) # output(5, 30, 64)
pred = self.linear(output) # (5, 30, 1)
#print(pred)
pred = pred[:, -1, :] # (5, 1)
return pred
net=LSTM()
net = torch.load('model_LSTM_test.pth')
net = net.to(device)
criterion=nn.MSELoss()#均方误差计算损失率
optimizer=torch.optim.Adam(net.parameters(),lr=1e-2)
n=0
for i in range(epoch):
for j in range(int(len(y)/batch_size)):
train_X=x[j*batch_size:(j+1)*batch_size,:,:]#切分一个batch
train_Y=y[j*batch_size:(j+1)*batch_size,:]
var_x=torch.tensor(train_X,dtype=torch.float32)#,device=device
var_y=torch.tensor(train_Y,dtype=torch.float32)#,device=device
out = net(var_x)#输出
optimizer.zero_grad()
loss=criterion(out,var_y)
loss.backward()
optimizer.step()
if i%1==0:
print('Epoch: {:4}, Loss: {:.5f}'.format(i, loss.item()))
#torch.save(net, 'model_LSTM_test.pth')


小风飞子
- 粉丝: 394
最新资源
- 机械手自动操作控制的PLC程序设计.doc
- 第3章应用数据库设计与创建幻灯片课件.ppt
- 学校网站建设推广服务方案.pptx
- VisualC2005Windows编程技术教材配套资源ppt课件(完整版).zip
- 复合材料旋翼结构优化与软件实现的开题报告.docx
- 通用过程监测软件的研究与开发的开题报告.docx
- 地球的运动flash动画演示---教学文案.ppt
- 基于词汇对齐的未登录词Web挖掘译文候选的重排序的开题报告.docx
- 会计软件的应用电子教案.pptx
- 计算机网络基础及常见网络故障的处理 PPT.ppt
- 四川大学2021年9月《移动通信系统》作业考核试题及答案参考2.docx
- 制药企业质量管理信息化建设.docx
- 基于单片机的数字抢答器设计(1).docx
- 第23讲PHP面向对象开发的学习七教材课程.ppt
- 福建师范大学2021年9月《通信原理》作业考核试题及答案参考4.docx
- 软件购买及网站建设服务合同(1).doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



- 1
- 2
- 3
- 4
- 5
- 6
前往页