前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BRITS代码复现

BRITS代码复现

原创
作者头像
.nov
发布2022-05-17 20:23:28
7780
发布2022-05-17 20:23:28
举报
文章被收录于专栏:论文复现

一、概述

本文使用《GPU 云服务器用户实践征文》活动提供的GPU实现了对论文 BRITS:Bidirectional Recurrent Imputation for Time Series 代码的复现。

代码链接:https://pan.baidu.com/s/149OVAUDVhyXHzJLs454egQ?pwd=go05

二、摘要

在许多分类/回归任务中,时间序列被广泛用作信号。时间序列包含许多缺失值是普遍存在的。给定多个相关的时间序列数据,如何填充缺失值并预测其类别标签?现有的插补方法通常对潜在的数据生成过程施加强有力的假设,例如状态空间中的线性动力学。在本文中,我们提出了一种基于递归神经网络的时间序列数据缺失值插补新方法BRITS。我们提出的方法直接学习双向循环动力系统中的缺失值,无需任何特定假设。将输入值作为RNN图的变量处理,并在反向传播过程中进行有效更新。英国人有三个优势:(a)它可以处理时间序列中的多个相关缺失值;(b) 它推广到具有非线性动力学的时间序列;(c) 它提供了一个数据驱动的插补程序,适用于缺少数据的一般设置。我们在三个真实数据集上评估了我们的模型,包括空气质量数据集、医疗保健数据和人类活动的定位数据。实验表明,我们的模型在插补和分类/回归精度方面都优于最先进的方法。

三、实验部分(医疗数据)

我们评估了2012年PhysioNet Challenge中的医疗数据模型,该模型由重症监护病房(ICU)的4000个多变量临床时间序列组成。每个时间序列包含35个测量值,如白蛋白、心率等,这些测量值在患者入院后48小时内不定期采样。我们强调,这个数据集非常稀疏。总共有高达78%的缺失值。对于这个数据集,我们同时执行插补任务和分类任务。为了评估插补性能,我们从数据中随机剔除10%的观察测量值,并将其作为基本事实。同时,我们将预测每位患者的住院死亡作为一项二元分类任务。请注意,消除的测量值仅用于验证插补,模型永远看不到它们。

四、调试记录

Ⅰ 运行测试

以模型 rits_i 为例在多个平台测试运行。

论文标准

 Table 1: Performance Comparison for Imputation Tasks
Table 1: Performance Comparison for Imputation Tasks

Ⅱ 测试实验

1、环境:pytorch,数据量:400条

训练loss和验证的MAE、MRE如下,和论文所述还有差距

2、环境:paddle AI Studio 经典版,数据量:4000条

训练loss和验证的MAE、MRE如下,和论文中所给的结果有较大差距。

测试结果:

3、环境:paddle后台任务,数据量:4000条

训练loss和验证的MAE、MRE如下,和论文中所给的结果有较大差距。

epoch: 999, batch: 13/13, avg loss: 3.940 AUC: 0.787 MAE: 0.557 MRE: 0.784 测试结果: AUC: 0.637 MAE: 1.297 MRE: 1.827

原因分析

① 可能是paddle的架构和torch不一样,修改代码的时候有些没修改过来?

② 可能是数据量大,1000 epoch不利于训练

4、环境:腾讯云,Pytorch,数据量:400条

MAE和MRE都超过论文数值

读取保存的模型,加载数据进行评估:

五、训练时遇到的问题

CPU利用率很高,但是内存、GPU的利用率却很低

即使同时训练两个模型,GPU的利用率还是基本稳定在20%以下

推测可能是因为代码中数据加载和处理部分较为复杂,不断切换到CPU中?

下面三张图分别时CPU、内存和GPU利用率

14:50开始训练,同时训练两个模型

六、模型数据

BRITS

BRITS相较于RITS-I,loss下降的更平稳。

方法

我的填补

论文的填补

我的分类

论文的分类

GRU-D

0.612(85.94%)

0.559(77.58%)

0.903

0.828

M-RNN

0.404(56.73%)

0.451(62.65%)

0.935

0.800

RITS-I

0.372(52.21%)

0.395(54.80%)

0.996

0.821

BRITS-I

0.367(51.45%)

0.361(50.01%)

1.000

0.831

RITS

0.322(45.20%)

0.300(41.89%)

0.939

0.840

BRITS

0.299(41.98%)

0.281(39.14%)

1.000

0.850

七、疑问

1、 我实验的分类任务的效果全都优于论文所给,怀疑是不是哪步操作有误。

2、不知道训练需要多少条数据。论文没有提到训练用的数据是多少条,整个数据集是有4000条数据,但是论文所附代码只包含400条。

3、上表中数据也只训练了400条数据,测试也是在这400条数据中抽取的,是不是会造成在训练集上的效果更好(即疑问1)?

因此,我尝试从4000条数据中加载数据进行测试

使用BRITS模型的效果如下:

分类效果降了下来,但是填补效果也降了下来。

使用GRU-D模型的效果如下:

对比模型的分类效果降了下来,但是填补效果也降了下来。

因此,怀疑是参数调整不如论文?

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
  • 二、摘要
  • 三、实验部分(医疗数据)
  • 四、调试记录
    • Ⅰ 运行测试
      • Ⅱ 测试实验
        • 1、环境:pytorch,数据量:400条
        • 2、环境:paddle AI Studio 经典版,数据量:4000条
        • 3、环境:paddle后台任务,数据量:4000条
        • 原因分析
        • 4、环境:腾讯云,Pytorch,数据量:400条
    • 五、训练时遇到的问题
    • 六、模型数据
    • 七、疑问
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档