吴恩达深度学习编程作业 pytorch 版rnn时间序列

2023-11-10

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import torch

from torch import nn
from torch.autograd import Variable
#定义模型
'''
input_size – 输入的特征维度
hidden_size – 隐状态的特征维度
num_layers – 层数(和时序展开要区分开)
'''
class lstm_reg(nn.Module):
     def __init__(self, input_size, hidden_size, output_size=5, num_layers=1):
          super(lstm_reg, self).__init__()
          
          self.rnn = nn.LSTM(input_size,     
            hidden_size,     # rnn hidden unit
            num_layers,       # 有几层 RNN layers
            batch_first=True, )
          
          self.out = nn.Linear(hidden_size, output_size)
          
     def forward(self,x):
        
        r_out, (h_n, h_c) = self.rnn(x, None) 

        out = self.out(r_out[:, -1, :])
        
        return out

def get_data(look_back,output_size):
    df = pd.read_csv('../你的文件.csv',encoding='gbk')
    df= df[['date','value']]
    df['date'] = pd.to_datetime(df['date'])
    df = df.sort_values(by=['date']).reset_index()[['date','value']]
    
    df = df[['value']]#.values.astype('float32')
    max_value = np.max(df['value'].values)
    min_value = np.min(df['value'].values)
    scalar = max_value - min_value
    dataset = list(map(lambda x: (x-min_value)/scalar, df['value'].values))#数据先归一化
    dataX, dataY = [], []
    for i in range(len(dataset) - look_back - output_size):
        a = dataset[i:(i + look_back)]
        dataX.append(a)
        dataY.append(dataset[(i + look_back):(i+look_back+output_size)])
    dataX, dataY = np.array(dataX), np.array(dataY)
    
    train_size = round(len(dataX)*0.7)-1
    train_x,train_y,test_x,test_y = np.array(dataX[:train_size]),np.array(dataY[:train_size]),np.array(dataX[train_size:]),np.array(dataY[train_size:])
    return train_x,train_y,test_x,test_y,min_value,scalar

def model(EPOCH = 10000,BATCH_SIZE = 20,time_step=100,
  hidden_size=15,lambd = 0.0001,lr=0.0009,num_layers=10,output_size=5):
     
    
    train_x,train_y,test_x,test_y,min_value,scalar = get_data(time_step,output_size)
    
    train_x = train_x.reshape(-1, time_step,1)
    train_y = train_y.reshape(-1,output_size)
    test_x = test_x.reshape(-1, time_step,1)
    test_y = test_y.reshape(-1,output_size)
    train_x = torch.from_numpy(train_x)
    train_y = torch.from_numpy(train_y)
    test_x = torch.from_numpy(test_x)
    
    
    net = lstm_reg(1, hidden_size,num_layers=num_layers,output_size=output_size)

    criterion = nn.MSELoss()#均方误差
    
    optimizer = torch.optim.Adam(net.parameters(),weight_decay=lambd,lr=lr)#Adam梯度下降法,学习率选择
    #开始训练
    for epoch in range(EPOCH):
        for i in range(0,len(train_x),BATCH_SIZE):
            var_x = train_x[i:i+BATCH_SIZE]
            
            var_y = train_y[i:i+BATCH_SIZE]
            
             
            out = net(var_x.float())#前向传播
            
            loss = criterion(out, var_y.float())#误差

            #输出测试集合的预测和误差
            test_out = net(test_x.float())
            test_loss = criterion(test_out,torch.from_numpy(test_y).float())
            optimizer.zero_grad()#反向传播
            loss.backward()
            optimizer.step()
            if epoch%10==0:
                print('Epoch:{}, Loss:{:.5f}   test_Loss:{:.5f}'.format(epoch, loss.item(),test_loss.item()))
                               
    #保存
    torch.save(net,'./多层模型测试.tar')
    #加载
    #net = torch.load('./test1.tar') 
    
    #预测一下train_x
    train_y_hat = net(train_x.float()).data.numpy().reshape(-1,output_size)
    train_y_hat_restore =  train_y_hat*scalar+min_value 
    train_y_restore  = (train_y*scalar+min_value ).data.numpy().reshape(-1,output_size)
    # print('train预测:',train_y_hat_restore)
    # print('train实际:',train_y_restore) 
    test_y_out = net(test_x.float())
    test_y_loss = criterion(test_y_out,torch.from_numpy(test_y).float())
    print('验证误差:',test_y_loss)
    test_y_hat = test_y_out.data.numpy().reshape(-1,output_size)
    test_y_hat_restore =  test_y_hat*scalar+min_value 
    test_y_restore  = test_y.reshape(-1,output_size)*scalar+min_value 
    # print('test预测:',test_y_hat_restore)
    # print('test实际:',test_y_restore) 
    minus =test_y_hat_restore-test_y_restore
    #print('实际误差:',type(minus))
    df = pd.DataFrame({'y':list(test_y_restore.reshape(-1))
        ,'yhat':list(test_y_hat_restore.reshape(-1))
        ,'minus':list(minus.reshape(-1))})
    print(df)
    print('验证后真实数据mse:',np.mean(minus**2))
    df.to_csv('./rnn的测试集结果4.csv')
    # plt.plot(train_y_hat_restore, 'g', label='train_prediction')
    # plt.plot(train_y_restore, 'b', label='train_real')
    # plt.plot(test_y_hat_restore, 'r', label='test_prediction')
    # plt.plot(test_y_restore, 'tan', label='test_real')
    # plt.plot(minus, 'dimgray', label='minus')
    # plt.legend(loc='best')

    # plt.show()

    





if __name__ == "__main__":
    model()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

吴恩达深度学习编程作业 pytorch 版rnn时间序列 的相关文章

随机推荐

  • 教学场景下的AI数字人,可视化语音交互

    玩了Midjourney 感慨AI太强大了 设计师已哭晕 AI数字人 教学场景下的AI数字人 能实现什么 图 AI数字人 图 AI数字人 个性化学习支持 根据学生的个人需求和学习风格 提供个性化的学习支持和建议 自动化评估和反馈 可以帮助教
  • Vulhub靶场-shellshock漏洞复现

    漏洞介绍 漏洞描述 Shellshock的原理是利用了Bash在导入环境变量函数时候的漏洞 启动Bash的时候 它不但会导入这个函数 而且也会把函数定义后面的命令执行 在有些CGI脚本的设计中 数据是通过环境变量来传递的 这样就给了数据提供
  • 七分醉意录

    2022 1 24 七分醉意 时隔两年整 没有公司年会聚会 今天却搞了一次 说不清的感觉 首先环境让人第一眼看了想骂街 然而 最后的结果却让人有一丝的怀念和回味 第一次真正地品尝公司茅台镇的酱香型白酒 以公司品牌名命 我想如果没有喝过的人一
  • Google_三大论文中文版(Bigtable、 GFS、 Google MapReduce)

    做个中文版下载源 http dl iteye com topics download 38db9a29 3e17 3dce bc93 df9286081126 做个原版地址链接 http labs google com papers gfs
  • 三进制计算机可以实现吗,对于三进制计算机逻辑运算方法的猜想

    这件事主要源于CSDN上的这篇文章 莫斯科国立大学三进制计算机发展史 阅读后就猜想对于三进制计算机的逻辑运算是如何处理的呢 在二进制计算机中 基本的逻辑计算有 与 或 和 非 下面分别用AND OR NOT来表示 0 AND 0 0 0 O
  • 3dmax中怎么修改帧数

    在右下角的播放键右键修改帧数的面板就会自动弹出来 转载于 https www cnblogs com ZeroMurder p 5337384 html
  • 计算机文本自定义,自定义文本编辑器

    自定义文本编辑器 概述 您可以在管理资产和创建通信UI中自定义文本编辑器 以添加更多字体和字体大小 这些字体包括英语和非英语 如日语 字体 您可以进行自定义 以在字体设置中更改以下内容 字体系列和大小 高度和字母间距等属性 字体系列和大小
  • Windows CMD 常用指令

    有关某个命令的详细信息 请键入 HELP 命令名 ASSOC 显示或修改文件扩展名关联 ATTRIB 显示或更改文件属性 BREAK 设置或清除扩展式 CTRL C 检查 BCDEDIT 设置启动数据库中的属性以控制启动加载 CACLS 显
  • 软件设计师-UML基础教程

    场景 针对UML1 5各种模型图的构成和功能进行说明 UML概述 UML简介 UML Unified Modeling Language 为面向对象软件设计提供统一的 标准的 可视化的建模语言 适用于描述以用例为驱动 以体系结构为中心的软件
  • windows控制台命令窗口中文乱码chcp 65001

    1 打开CMD exe命令行窗口 默认情况下 编码为936 简体中文 GBK编码 2 通过chcp命令改变代码页 chcp 65001 65001为UTF 8的代码页 修改以前的编码936 该编码只能显示GBK编码的中文 修改后的编码 修改
  • idea 查找未使用的代码

    1 查找未使用的代码 输入 unused declaration 2 处理方法 未使用的类 方法的处理方式 Safe delete 删除 Comment out 注释掉 Add as Entry Point 添加为入口点 未用过 Suppr
  • Python 第一章 基础知识(2) 交互式解释器

    第一章 基础知识 2 交互式解释器 Python 2 7 3 default Apr 30 2012 21 18 11 GCC 4 7 0 20120416 Red Hat 4 7 0 2 on linux2 Type help copyr
  • [需求]需求分析能力之一:用流程图说话

    从江西项目上回来 就有一堆的事情 总算可以告一段落了 那是阮阮还在泰安基地工作的时候 有一次 我跟她聊天 说起需求能力 我说 我并不是比别人聪明 而是掌握了需求的技巧 可以很快的提取 整理到系统需求 因此今天 就是 我把这种需求能力免费告诉
  • Open3d学习计划——4(网格)

    Open3d学习计划 4 网格 欢迎大家关注 点云PCL 公众号 进入群聊一起学习 open3d有一种被称为TriangleMesh的3d三角网格的数据结构 下面的代码展示了如何从一个ply文件读取三角网格数据并且打印它的顶点和三角形 pr
  • Android知识点博客集1

    http blog csdn net true100 article category 2849593
  • 对于正则化项L1,L2范数的理解

    对于正则化项L1 L2范数的理解 L2范数正则化 L1范数正则化 L1范数正则化与L2范数正则化的作用区别 L1范数正则化为什么比L2范数正则化更容易获得稀疏解 之前讲到了利用正则化项降低过拟合 这里再总结一下L1 L2这两种范数作为正则化
  • python练习题(四):有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数

    count 0 for i in range 1 5 for j in range 1 5 for k in range 1 5 if i j and i k and j k print i j k count 1 print 总计 d c
  • Python爬虫逆向实战案例(五)——YRX竞赛题第五题

    题目 抓取全部5页直播间热度 计算前5名直播间热度的加和 地址 https match yuanrenxue cn match 5 cookie中m值分析 首先打开开发者工具进行抓包分析 从抓到的包来看 参数传递了查询参数m与f 同时页面中
  • 图常见算法-广度优先算法python实现

    广度优先算法 广度优先搜索 breadth first search BFS 该算法用于解决两类问题 1 节点A到节点B是否有路径 2 节点A到节点B的哪条路径最短 算法实现思想 图的建立使用了散列表 双端队列使用了deque 为了避免死循
  • 吴恩达深度学习编程作业 pytorch 版rnn时间序列

    import numpy as np import pandas as pd import matplotlib pyplot as plt import torch from torch import nn from torch auto