【深度学习】CNN模型处理简单时间序列

2023-11-14

本文使用CNN模型,Conv1d卷积进行时间序列的分析处理。将数据导入模型后,可以运行。但模型预测精度不高,且输出十分不稳定。此模型仅用于熟悉CNN模型的基本结构,如有错误,还望海涵。

一、数据介绍

数据长度为252,在导入模型时,将80%的数据用于模型训练,20%的数据用于模型验证。
在这里插入图片描述

二、数据预处理

先对数据进行归一化处理,以加快模型运行速度。数据预测原理为,将n个数据分为一组,用前n-1个数据来预测第n个数据,通过预测值与实际值计算损失值。再向后推进,每次推进长度为1。
例如,如果数据序列为[1,2,3,4,5,6],n=4。则第一次将[1,2,3]输入模型,将模型输出结果和4导入损失计算函数进行损失计算,下一次将[2,3,4]导入,以此类推。

三、模型代码

模型结构
在这里插入图片描述

模型定义代码

import torch
import torch.nn as nn
from tensorboardX import SummaryWriter


class CNNnetwork(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1d = nn.Conv1d(1, 64, kernel_size=2)
        self.relu = nn.ReLU(inplace=True)
        self.Linear1 = nn.Linear(64 * 8, 50)
        self.Linear2 = nn.Linear(50, 1)

    def forward(self, x):
        x = self.conv1d(x)
        x = self.relu(x)
        x = x.view(-1)
        x = self.Linear1(x)
        x = self.relu(x)
        x = self.Linear2(x)
        return x


if __name__ == '__main__':
    mod = CNNnetwork()
    input = torch.ones(1, 1, 9)
    out = mod(input)
    print(out.shape)

    writer = SummaryWriter('logdir')
    writer.add_graph(mod, input)
    writer.close()

模型训练与验证

import pandas as pd
import numpy as np
import torch
from matplotlib import pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from CNN_model import *

Datasets = pd.read_excel(io='dataset.xlsx', sheet_name='Sheet1', usecols='D')
data = Datasets['data'].values.astype(float)
train_set = data[:-int(len(data) * 0.2)]
test_set = data[-int(len(data) * 0.2):]
# print(len(train_set))   # 202
# print(len(test_set))    # 50

scaler = MinMaxScaler(feature_range=(-1, 1))
train_norm = scaler.fit_transform(train_set.reshape(-1, 1))
train_norm = torch.FloatTensor(train_norm).view(-1)
train_data = []
seq_size = 9
for i in range(len(train_norm) - seq_size):
    window = train_norm[i:i + seq_size]
    label = train_norm[i + seq_size]
    train_data.append((window, label))

mod = CNNnetwork()

loss_fn = nn.MSELoss()

learning_rate = 1e-2
optimizer = torch.optim.SGD(mod.parameters(), lr=learning_rate)
# optimizer = torch.optim.Adam(mod.parameters(), lr=learning_rate)
total_train_step = 0
epoch = 500
loss_list = []
mod.train()
for i in range(epoch):
    for seq, y_true in train_data:
        optimizer.zero_grad()
        out = mod(seq.reshape(1, 1, -1))
        loss = loss_fn(out, y_true)
        loss.backward()
        optimizer.step()
        total_train_step = total_train_step + 1
        if total_train_step % 1000 == 0:
            print('训练次数:{},loss:{}'.format(total_train_step, loss.item()))
            loss_list.append(loss.item())

preds = train_norm[-seq_size:].tolist()
mod.eval()
for i in range(52):
    seq = torch.FloatTensor(preds[-seq_size:])
    with torch.no_grad():
        preds.append(mod(seq.reshape(1, 1, -1)).item())
print(preds)
true_value = scaler.inverse_transform(np.array(preds[seq_size:]).reshape(-1, 1))
print(true_value.tolist())
print(test_set)
plt.figure(1)
plt.plot(test_set, label='true value')
plt.plot(true_value, label='predict value')
plt.legend(loc="upper left")
plt.figure(2)
plt.plot(loss_list, label='loss')
plt.show()
torch.save(mod, 'mod_1.pth')

代码中,每10个数据为一组,用reshape函数使数据符合Conv1d要求。

四、模型输出结果

再不断调整损失函数、优化器、学习率、训练次数后,模型拟合效果依然不稳定。最大的原因可能为数据之间无直接关联性,无法通过数字间的关联找出规律。
下面为50个验证数据的拟合效果,蓝色线条为真实值,橙色为模型拟合值。
在这里插入图片描述
下图为模型训练过程中损失变化,每一千次训练记录一次损失。
在这里插入图片描述

五、参考文献

本文数据处理及模型构建思路参考了以下文章:CNN实现时间序列预测(PyTorch版)

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

【深度学习】CNN模型处理简单时间序列 的相关文章

  • 树莓派4学习记录(3)-安装tensorflow

    树莓派4学习记录 3 1 安装tensorflow 1 1 获取tensorflow安装文件 1 2 安装tensorflow 2 测试tensorflow 1 安装tensorflow 这里可以参考这个 https blog csdn n
  • sequelize操作数据库-优雅时间格式化

    sequelize操作数据库 优雅时间格式化 sequelize使用版本6
  • 【状态估计】非线性受控动力系统的线性预测器——Koopman模型预测MPC(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据 文章 1 概述 文献来源 本文提出了一类非线性受控
  • 指针初始化与释放问题

    int p free p 操作释放p指向的空间 但是p的值随机 会产生释放未知区域的问题 释放的不是p的空间 而是p指向的空间 p nullptr free P p nullptr 释放后应让p为空 防止再次释放已经释放的空间
  • 测试过程中印象最深刻的bug

    我就想到在我刚入行不久的时候有一个BUG 当时我们做的是一个CRM客户管理系统 里边有个客户列表 当时按照测试用例去执行的时候 发现出现点击客户删除却无法删除 于是就提了一个单 但是开发后来发现删除客户没问题 又给我打回 后来我去查看服务器
  • “自顶向下,逐步求精”的方法

    1 什么叫做 自顶向下 逐步求精 目前软件开发方法使用最广泛的 当属结构化的方法和面向对象的方法 而其中 结构化程序设计支持 自顶向下 逐步求精 的程序设计方法 自顶向下 的具体内涵是将复杂 大的问题划分为小问题 找出问题的关键 重点所在
  • MYSQL数据库慢查询优化整理

    通常优化SQL的时候都需要查看慢查询日志 先找到查询慢的语句 再去进行优化 MYSQL开启慢查询日志 先查看是否开启了 登录MYSQL 输入以下模糊查询的语句show variables like query 可以看到红线中的三个属性 分别
  • xmind收费与免费的区别_你用什么来做笔记呢 现在聪明的人都开始用Xmind了

    以前读书的时候做笔记是个很麻烦的事情 如果从头写到尾倒还好 一旦发现中间缺漏了什么或者想加进去内容就会发现很可能 很大可能要重新写笔记 那个时候就想 要是能有个做笔记的软件 想加条内容或者减条内容很方便多好 而且不用先算计好要给下级文案留多
  • 【计算机网络】I/O多路转接之poll

    不同与select使用三个位图来表示三个fdset的方式 poll使用一个 pollfd的指针实现 pollfd结构包含了要监视的event和发生的event 不再使用select 参数 值 传递的方式 同时 pollfd并没有最大数量限制
  • CSS图片剪裁与原比例压缩或放大

    在前端网页制作的过程中 图片的处理往往比较头疼 当然不考虑你有很给力的美工后援的情况下 以下将对一些常见的CSS图片处理需求情况进行分析 1 一张图片要放在固定宽高的内容块中 并填充满整个内容块 看起来整齐划一 我们假设要把一张大小为192
  • cmake error:does not appear to contain CMAKEList.txt

    需要检查一下CMAKEList txt文件的权限 我这边在win10主机上git clone下载的代码 copy到ubuntu上 在ubuntu上执行cmake 提示找不到CMAKEList txt文件 排查了一圈 是因为权限问题 将文件权
  • 凯斯轴承数据故障诊断PHM轴承寿命预测深度学习迁移学习元学习开源代码集合

    实打实的开源手撸代码 没错 纯本人打造 保证精确度达到90 以上 可以看到可视化结果如下图所示
  • 这篇文章,让你了解ERC-1155 多代币标准协议

    文章目录 ERC1155 介绍 多代币标准 前提条件 代币标准 ERC 20 ERC 721 构建 ERC1155 代币合约 ERC 1155 的功能和特点 批量传输 批量余额 批量审批 接收钩子 支持非同质化代币 安全转账规则 ERC11
  • mysql 主键 重置_在MySQL中重置主键

    要重置主键 首先使用TRUNCATE表 然后使用ALTER TABLE 让我们首先创建一个表 mysql gt create table DemoTable1929 UserId int NOT NULL AUTO INCREMENT PR
  • JVM调优总结(三)-基本垃圾回收算法

    可以从不同的的角度去划分垃圾回收算法 按照基本回收策略分 引用计数 Reference Counting 比较古老的回收算法 原理是此对象有一个引用 即增加一个计数 删除一个引用则减少一个计数 垃圾回收时 只用收集计数为0的对象 此算法最致
  • dot product【点积】

    1 概念 点积在数学中 又称数量积 dot product scalar product 是指接受在实数R上的两个向量并返回一个实数值标量的二元运算 两个向量a a1 a2 an 和b b1 b2 bn 的点积定义为 a b a1b1 a2
  • 不能安装 64 位版本的 Microsoft Access 2010 数据库引擎,因为您当前已安装 32 位的 Office 产品一例问题的解决

    这个以前遇到过 那次处理的时候是在卸载程序中卸载 Microsoft Office Access database engine 2007 来解决的 但这次 我打开卸载程序界面 找不到office 2007 看到一个有关office 200
  • 有赞前端SP毁约后的日子

    22届双非本 22年3月底前端sp被有赞毁约 5月底重新找到工作 6月底入职 前言 本人不想读研 考公 只想工作 而且想着全国这么多公司 总能找到工作吧 大不了降低要求 山雨欲来风满楼 自从21年11月份拿了offer后 我就开始摆烂了 准
  • Django基础入门⑪:DjangoDjango数据表关联(一对一,一对多,多对多关系)

    Django基础入门 DjangoDjango数据表关联 Django数据表关联 一对一关系类型 语法格式 实例应用 一对多关系类型 必填参数 可选参数 语法格式 实例应用 多对多关系 ManyToManyFiled定义 可选参数 语法格式
  • 西门子1200连接安川伺服的心得

    安川伺服通信注意点 安川的伺服驱动器只支持安川控制系统的通讯协议MECHATROLINK II 和其他厂家的PLC搭配使用目前采用的方式只能是通过脉冲序列来控制 读取绝对值编码器数值方式可以采取自由口通信或高数计数器的方式 1 伺服电机中编

随机推荐

  • 常用的Vue生命周期函数

    Vue生命周期函数 组件挂载 组件更新 组件销毁时触发的一些方法 这些方法就叫做生命周期函数 beforeCreate console log 刚刚创建实例 created console log 实例创建完成 beforeMount co
  • eclipse开发工具技巧之打开内置浏览器

    前言 eclipse是非常强大的java开发工具 java是现在最流行 使用人数最多的语言 虽然现在idea很火 但很多中小公司还是以eclipse为主 用它应付绝大多数项目是没有任何问题 我也建议新手用eclipse入门 因为它确实很简单
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • Cisco交换机配置VTP

    文章目录 1 拓扑图 2 任务描述 3 Sw1配置 4 Sw2配置 5 Sw3配置 6 测试 1 拓扑图 2 任务描述 在 SW1 SW2 和 SW3 上配置 VTP 版本2 Sw1为服务器 Sw2 Sw3为客户端 使用java csdn做
  • Java接口默认实现、接口和抽象类区别

    Java8新特性 Java8接口可添加默认实现 接口和抽象类的区别 设计模式 缺省适配模式 Java8接口可添加默认实现 java8新增了接口默认实现功能 每个接口可以有默认实现 实现类可以根据其需要进行定制化得实现 抽象方法前面添加def
  • 复旦邱锡鹏:深度剖析 ChatGPT 类大语言模型的关键技术

    内容来源 ChatGPT 及大模型专题研讨会 分享嘉宾 复旦大教授 邱锡鹏 分享主题 对话式大型语言模型 转载自CSDN稿件 ChapGPT 自问世以来 便展现出了令世人惊艳的对话能力 仅用两个月时间 ChatGPT 月活跃用户就达一亿 是
  • 网课教程(1) 前言

    什么是脚本 脚本 Script 是使用一种特定的描述性语言 依据一定的格式编写的可执行文件 脚本语言又被称为扩建的语言 或者动态语言 是一种编程语言 用来控制软件应用程序 脚本通常是以文本 ASC 保存 只是在被调用时进行解释或者编译 我们
  • CRM系统基本的模板示例

    CRM SSM总结 1 步骤 1 1 创建WEB项目 1 2 导入JAR lib下 包以及静态资源 css fonts js jsp 2 数据库 CREATE DATABASE crm ssm 客户来源 电话营销 网络营销 推广活动 促销活
  • 模式识别原理(Pattern Recognition)、概念、系统、特征选择和特征

    1 1 模式识别的基本概念 一 广义定义 1 模式 一个客观事物的描述 一个可用来仿效的完善的例子 2 模式识别 按哲学的定义是一个 外部信息到达感觉器官 并被转换成有意义的感觉经验 的过程 例 识别热水 字迹等 二 狭义的定义 1 模式
  • ML-数据分析模板

    文章目录 机器学习 数据分析模板 Objective Data Set Information Attribute Information INPUT 单特征与缺失值展示 Feature Cleaning Engineering 标签转换
  • Window10与Linux虚拟机实现文件传输

    前言介绍 对于许多需要使用Linux虚拟机的小伙伴来说 如何实现虚拟机和主机间的文件传输是一个问题 尤其是有些文件虚拟机下载不太方便 这时文件共享就比较重要了 当然 虚拟平台的软件提供商也有着一些解决方案 如VM下的Tools工具或者VB下
  • 5种Python雪花飘落代码(建议收藏)

    前言 本文章向大家介绍用 Python 实现雪花飘落效果 运行以下代码 你将会看到一个美丽的雪花效果 你可以根据自己的需求 调整代码中的参数值以及其他细节 第一种 普通雪花代码 import turtle import random def
  • sqrt函数

    sqrt 函数的用法 求三角形面积 今天刷题的时候看到了三角形面积 突然想到老师上课讲过 这不是好简单 就直接上代码 include
  • Faster R-CNN算法

    Faster R CNN算法是作者Ross Girshick对Fast R CNN算法的一种改进 Fast R CNN在速度和精度上都有了不错的结果 但仍有一些不足之处 Faster R CNN算法同样使用VGG 16网络结构 检测速度在G
  • 联想笔记本声音太小怎么办_电脑音量调到最大了还是声音太小,怎么办啊??...

    展开全部 准备一台电脑 计算机需e68a843231313335323631343130323136353331333433643633要安装驱动程序向导 或备份声卡驱动程序或驱动程序光盘 以下步骤是win7操作界面截图演示 1 首先 点击
  • java中的访问修饰符详解

    主要讲述一下java中protected的修饰控制范围 在叙述protected修饰符使用之前 先来说一下java 可以发现 开发java程序是一个时时刻刻都在编写类 开发类 定义类的过程 类里面可以有main方法 main方法不管存在那个
  • ppt太大怎么压缩变小呢?五种方法灵活运用

    为了更好地压缩PPT文件 还有一些制作PPT时的建议 使用压缩后的图片 在将图片插入到PPT中时 可以将其压缩后再插入 这样可以显著减小文件大小 废弃多余的幻灯片 将不需要的幻灯片删除或隐藏掉 这样可以减小PPT文件的大小 关闭自动保存 在
  • VC++中窗口过程函数及其消息发送、响应机制介绍

    在VC 中 窗口过程函数是应用程序定义的一个函数 主要功能是处理发送给窗口的消息 窗口过程函数的定义是 virtual LRESULT WindowProc UINT message WPARAM wParam LPARAM lParam
  • maven本地私服取jar包后再进行反编译获取源代码

    1 先去maven安装目录寻找setting xml D maven apache maven 3 1 1 conf 利用记事本打开 寻找标签 nexus central nexus mirror http XXX XXX XX XX 80
  • 【深度学习】CNN模型处理简单时间序列

    本文使用CNN模型 Conv1d卷积进行时间序列的分析处理 将数据导入模型后 可以运行 但模型预测精度不高 且输出十分不稳定 此模型仅用于熟悉CNN模型的基本结构 如有错误 还望海涵 目录 一 数据介绍 二 数据预处理 三 模型代码 四 模