码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Anomaly-Transformer (ICLR 2022 Spotlight)复现过程及问题


    官方代码:GitHub - thuml/Anomaly-Transformer: About Code release for "Anomaly Transformer: Time Series Anomaly Detection with Association Discrepancy" (ICLR 2022 Spotlight), https://openreview.net/forum?id=LzQQ89U1qm_

    作者推荐的是 python3.6,pytorch 1.4 

    1. 环境修改

    尝试安装 pytorch 1.4 运行,但是代码会卡住,并且没有报错。定位错误在:Anomaly-Transformer/model/attn.py

    self.distances = torch.zeros((window_size, window_size)).cuda()

    .cuda() 卡住:原因是 安装的 pytorch 1.4 对应的CUDA 版本为 10.x,算力是 sm_86,CUDA 10.x 最高支持到 sm_75,因此需要CUDA 11.x来支持sm_8.x。


    因此升级 我的环境 python3.7,  pytorch 1.12  , 显卡3080Ti, CUDA 版本:11.3

    conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch

    再次运行训练脚本,又报错:

    RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation: [torch.cuda.FloatTensor [512, 25]], which is output 0 of AsStridedBackward0, is at version 2; expected version 1 instead. Hint: enable anomaly detection to find the operation that failed to compute its gradient, with torch.autograd.set_detect_anomaly(True).

    解决:注释掉Anomaly-Transformer/solver.py 的第一个 .step():

    1. # Minimax strategy
    2. loss1.backward(retain_graph=True)
    3. # self.optimizer.step()
    4. loss2.backward()
    5. self.optimizer.step()

    参考:Why the optimizer.step() write twice? · Issue #8 · thuml/Anomaly-Transformer · GitHub


    2.  恭喜!  成功运行!

    python main.py --anormly_ratio 1 --num_epochs 3    --batch_size 128  --mode train --dataset PSM  --data_path dataset/PSM --input_c 25    --output_c 25

    ------------ Options -------------
    anormly_ratio: 1.0
    batch_size: 128
    data_path: dataset/PSM
    dataset: PSM
    input_c: 25
    k: 3
    lr: 0.0001
    mode: train
    model_save_path: checkpoints
    num_epochs: 3
    output_c: 25
    pretrained_model: None
    win_size: 100 

    ======================TEST MODE======================
    /opt/conda/lib/python3.7/site-packages/torch/nn/_reduction.py:42: UserWarning: size_average and reduce args will be deprecated, please use reduction='none' instead.
      warnings.warn(warning.format(ret))
    Threshold : 0.002150955616962149
    pred:    (87800,)
    gt:      (87800,)
    pred:  (87800,)
    gt:    (87800,)
    Accuracy : 0.9848, Precision : 0.9713, Recall : 0.9739, F-score : 0.9726 

    论文中的结果:对于PSM数据集

    P: 96.91,R: 98.9,  F1: 97.89

    复现的 Recall 略低。但是 Precision 略高。二者本就是需要权衡。可以通过调整上面的 Threshold : 0.002150955616962149 平衡二者。

  • 相关阅读:
    Transwarp Inceptor中的对象
    【课程】SP Module2 辅音和元音的声学
    glog从下载到使用实录
    视频转序列图片:高效批量转换,释放创造力
    提交代码触发Jenkins流水线更新
    golang bufio解析
    上周热点回顾(10.10-10.16)
    mysql binlog日志及mysqlbinlog操作详解
    Python学习:整数类型(int)详解
    软考 系统架构设计师系列知识点之设计模式(2)
  • 原文地址:https://blog.csdn.net/hymn1993/article/details/125558623
  • 最新文章
  • 【FHE】我们如何实现同态加密推理(八):SiLU 的密文化——两条路径,和一个 8 字节的开关
    SQLcl 中 c/old/new 替换变量为何失效?先定位再替换
    不让模型写作文,直接从它脑子里读答案:Jev 决策在 .NET 的两条路线
    Halo插件:支持GitHub的图床附件策略
    电视投屏界的“一股清流”!SimpleTVCast 6.0.0-beta 抢先体验:无需TV端App,界面大换血!✨
    华三VXLAN集中式网关实战指南:Spine多活网关 + 双活接入(M-LAG)
    软件更好写之后口碑会更重要
    大 O、大 Omega、大 Theta 的区别,O(n) 复杂度是什么意思
    Java标签跳转:一个鲜为人知但却很实用的小技巧
    多智能体系统论文速读
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号