当前位置: 首页 > news >正文

郑州网站建设最好企业培训公司

郑州网站建设最好,企业培训公司,滕州助企网站建设,友情链接怎么设置#项目说明#xff1a; 说明#xff1a;1time_steps滚动预测代码 y_norm scaler.fit_transform(y.reshape(-1, 1)) y_norm torch.FloatTensor(y_norm).view(-1)# 重新预测 window_size 12 future 12 L len(y)首先对模型进行训练#xff1b; 然后选择所有数据的后wind…#项目说明 说明1time_steps滚动预测代码 y_norm scaler.fit_transform(y.reshape(-1, 1)) y_norm torch.FloatTensor(y_norm).view(-1)# 重新预测 window_size 12 future 12 L len(y)首先对模型进行训练 然后选择所有数据的后window_size个数据通过训练每次通过前window_size个数据预测未来一个数据之后新预测的一个数据append加到preds中这样经过循环future次后通过滚动循环的方式预测未来future12天的数据完成滚动预测。 最后通过可视化查看预测结果。 preds y_norm[-window_size:].tolist() model.eval() for i in range(future): seq torch.FloatTensor(preds[-window_size:])with torch.no_grad():model.hidden (torch.zeros(1,1,model.hidden_size),torch.zeros(1,1,model.hidden_size)) preds.append(model(seq).item())true_predictions scaler.inverse_transform(np.array(preds).reshape(-1, 1))x np.arange(2019-02-01, 2020-02-01, dtypedatetime64[M]).astype(datetime64[D])plt.figure(figsize(12,4)) plt.grid(True) plt.plot(df[S4248SM144NCEN]) plt.plot(x,true_predictions[window_size:]) plt.show()完整代码解读 import torch import torch.nn as nnfrom sklearn.preprocessing import MinMaxScaler import time import numpy as np import pandas as pd import matplotlib.pyplot as pltfrom pandas.plotting import register_matplotlib_converters register_matplotlib_converters()# 导入酒精销售数据 df pd.read_csv(data\Alcohol_Sales.csv,index_col0,parse_datesTrue) len(df)df.head() # 观察数据集这是一个单变量时间序列plt.figure(figsize(12,4)) plt.grid(True) plt.plot(df[S4248SM144NCEN]) plt.show()y df[S4248SM144NCEN].values.astype(float)# print(len(y)) #325条数据test_size 12# 划分训练和测试集最后12个值作为测试集 train_set y[:-test_size] #323条数据 test_set y[-test_size:] #12条数据# print(train_set.shape) #(313,) 一位数组# 归一化至[-1,1]区间为了获得更好的训练效果 scaler MinMaxScaler(feature_range(-1, 1)) #scaler.fit_transform输入必须是二维的但是train_set却是一个一维所有实验reshape(-1,1) train_norm scaler.fit_transform(train_set.reshape(-1, 1)) #np.reshape(-1, 1) 列1行未知# print(train_norm.shape) #(313, 1) 这里将一维数据转化为二维# 转换成 tensor train_norm torch.FloatTensor(train_norm).view(-1) print(train_norm.shape) #torch.Size([313])# 定义时间窗口注意和前面的test size不是一个概念 window_size 12# 这个函数的目的是为了从原时间序列中抽取出训练样本也就是用第一个值到第十二个值作为X输入预测第十三个值作为y输出这是一个用于训练的数据点时间窗口向后滑动以此类推 def input_data(seq,ws): out []L len(seq)for i in range(L-ws):window seq[i:iws]label seq[iws:iws1]out.append((window,label)) #将x和y以tensor格式放入到out列表当中 return outtrain_data input_data(train_norm,window_size) len(train_data) # 等于325原始数据集长度-12测试集长度-12时间窗口class LSTMnetwork(nn.Module):def __init__(self,input_size1,hidden_size100,output_size1):super().__init__()self.hidden_size hidden_size# 定义LSTM层self.lstm nn.LSTM(input_size,hidden_size)# 定义全连接层self.linear nn.Linear(hidden_size,output_size)# 初始化h0c0self.hidden (torch.zeros(1,1,self.hidden_size),torch.zeros(1,1,self.hidden_size))def forward(self,seq):# 前向传播的过程是输入-LSTM层-全连接层-输出# https://pytorch.org/docs/stable/generated/torch.nn.LSTM.html?highlightlstm#torch.nn.LSTM# 在观察查看LSTM输入的维度LSTM的第一个输入input_size维度是(L, N, H_in), L是序列长度N是batch sizeH_in是输入尺寸也就是变量个数# LSTM的第二个输入是一个元组包含了h0,c0两个元素这两个元素的维度都是D∗num_layers,N,H_out)D1表示单向网络num_layers表示多少个LSTM层叠加N是batch sizeH_out表示隐层神经元个数pytorch中LSTM输入为[time_step,batch,feature],这里窗口time_step12,feature1[1维数据]batch我们这里设置为1所以使用seq.view(len(seq),1,-1)将tensor[12]数据转化为tensor[12,1,1]lstm_out, self.hidden self.lstm(seq.view(len(seq),1,-1), self.hidden) # print(lstm_out) #torch.Size([12, 1, 100]) [time_step,batch,hidden] # print(lstm_out.view(len(seq),-1)) #[12,100]pred self.linear(lstm_out.view(len(seq),-1)) # print(pred) #torch.Size([12, 1])return pred[-1] # 输出只用取最后一个值torch.manual_seed(101) model LSTMnetwork() criterion nn.MSELoss() optimizer torch.optim.Adam(model.parameters(), lr0.001)epochs 100 start_time time.time() for epoch in range(epochs):for seq, y_train in train_data:# 每次更新参数前都梯度归零和初始化optimizer.zero_grad()model.hidden (torch.zeros(1,1,model.hidden_size),torch.zeros(1,1,model.hidden_size))y_pred model(seq)loss criterion(y_pred, y_train)loss.backward()optimizer.step()print(fEpoch: {epoch1:2} Loss: {loss.item():10.8f})print(f\nDuration: {time.time() - start_time:.0f} seconds)future 12# 选取序列最后12个值开始预测 preds train_norm[-window_size:].tolist()# 设置成eval模式 model.eval() # 循环的每一步表示向时间序列向后滑动一格 for i in range(future):seq torch.FloatTensor(preds[-window_size:]) #第下一次循环的时候seq总是能取到后12个数据因此及时后面用pred.append()也还是每次用到最新的预测数据完成下一次的预测。with torch.no_grad():model.hidden (torch.zeros(1,1,model.hidden_size),torch.zeros(1,1,model.hidden_size))item理解取出张量具体位置的元素元素值并且返回的是该位置元素值的高精度值保持原元素类型不变必须指定位置即原张量元素为整形则返回整形原张量元素为浮点型则返回浮点型etc.# print(model(seq),model(seq).item()) #tensor([0.1027]), tensor([0.1026])preds.append(model(seq).item()) #每循环一次这里会将新的预测值添加到pred中# 逆归一化还原真实值 true_predictions scaler.inverse_transform(np.array(preds[window_size:]).reshape(-1, 1))# 对比真实值和预测值 plt.figure(figsize(12,4)) plt.grid(True) plt.plot(df[S4248SM144NCEN]) x np.arange(2018-02-01, 2019-02-01, dtypedatetime64[M]).astype(datetime64[D])plt.plot(x,true_predictions) plt.show()# 放大看 fig plt.figure(figsize(12,4)) plt.grid(True) fig.autofmt_xdate()plt.plot(df[S4248SM144NCEN][2017-01-01:]) plt.plot(x,true_predictions) plt.show()# 重新开始训练 epochs 100 # 切回到训练模式 model.train() y_norm scaler.fit_transform(y.reshape(-1, 1)) y_norm torch.FloatTensor(y_norm).view(-1) all_data input_data(y_norm,window_size)start_time time.time()for epoch in range(epochs):for seq, y_train in all_data: optimizer.zero_grad()model.hidden (torch.zeros(1,1,model.hidden_size),torch.zeros(1,1,model.hidden_size))y_pred model(seq)loss criterion(y_pred, y_train)loss.backward()optimizer.step()print(fEpoch: {epoch1:2} Loss: {loss.item():10.8f})print(f\nDuration: {time.time() - start_time:.0f} seconds)# 重新预测 window_size 12 future 12 L len(y)preds y_norm[-window_size:].tolist()model.eval() for i in range(future): seq torch.FloatTensor(preds[-window_size:])with torch.no_grad():model.hidden (torch.zeros(1,1,model.hidden_size),torch.zeros(1,1,model.hidden_size)) preds.append(model(seq).item())true_predictions scaler.inverse_transform(np.array(preds).reshape(-1, 1))x np.arange(2019-02-01, 2020-02-01, dtypedatetime64[M]).astype(datetime64[D])plt.figure(figsize(12,4)) plt.grid(True) plt.plot(df[S4248SM144NCEN]) plt.plot(x,true_predictions[window_size:]) plt.show() 代码说明代码中包含了训练、测试和预测。但没有对该模型进行评估。
http://www.hkea.cn/news/14271775/

相关文章:

  • 网站备案必须做前置审批吗wordpress zmovie主题
  • 网站内容建设的原则市场营销实际案例
  • 如何做网站策划案文化公司做网站交文化事业费吗
  • 设计公司网站应该包括的信息知乎营销推广
  • 做外围网站代理合法不厨具 技术支持东莞网站建设
  • 网站 流量 不够用圆方k20在线设计网站
  • 莱州网站建设制作把网站放到服务器上
  • 做网站单页烧钱凡科做网站
  • 烟台做网站公司淄博seo服务
  • 2018年网站开发语言排行wordpress网站模版
  • 兰州市做网站的企业有哪些成都发现1例新冠本土病例
  • 做图表用的网站做视频比较好的理财网站
  • 张家港网站设计重庆网站仿站
  • 泉州中小企业网站制作接网站开发项目平台
  • 网站后台模板 如何使用建设管理部门网站查询
  • 青海网站设计微信公众号服务平台
  • 临沂市建设局网站公示创意营销
  • 网站建立与推广专业网站建设制作
  • 电影网站网页设计实训报告东莞建设网站官网住房和城乡
  • 黑色背景的网站开发工具医院网站后台模板
  • 做互联网营销一般上什么网站黑龙江省中国建设银行网站首页
  • 呼和浩特 的网站建设生态农业网站建设方案
  • 做100个垂直网站西安引流推广公司
  • 网站如何做seo推广中国建设银行招聘网站报名系统
  • 竞价单页 网站洛谷网站中小玉文具怎么做
  • 联合建设官方网站公司网站建设须知
  • 中国产品网免费网站什么是门户
  • 为该网站做自适应利用微博做网站排名
  • 网站首页设计公司东莞建设造价信息网站
  • 电商网站开发要哪些技术东莞网站优化有哪些