【实验】学习实验debug,以及经验感悟

news2024/10/23 1:44:12

记录两次独立解决问题的过程:
目前来看,问题分为几种:
抄代码的时候抄错了,比如dim=1写成dim=0这种
逻辑错误,如果两份代码没什么差别的话,那么肯定是逻辑错误。
下面的两个问题都是逻辑错误,因为语法错误其实是会报错的,所以第一时间我们应该想的是算法问题,和ICPC一样。

问题一:thresh一直不变。

先检查两份代码,核心代码直接copy过来,做排除法。结果发现就算没改原来的代码,还是不行。
先检查中间变量维度,没问题后检查变量。两种方法:print法,tensorboard法,看分布用tensorboard,看大小可以直接print,print配合if使用,比如当值大于0.01再print,这样能避免太多数据混乱。
thresh作为nn.Parameter不变——>输出梯度,发现梯度是有的,而且设置>0.001输出也是有梯度的——>再继续找跟梯度有关的操作,函数etc.——>optimizer
最后顺着发现是optimizer的放的位置有问题。

问题二:公式推导的equivalent,实验并没有达到0

理论和实践对不上——>一方出了问题——>确定是实验有bug
把问题简化到最简——>多层L1不为0,先单独拎出来第一层来分析L1,对一个数据进行分析,不要有batch_size这一维
第一层要对输入输出分析。
先看input,求input L1,发现L1 = 0 ——> 证明为同一个输入——>排除输入的问题
那么一定是STB-IF layer这一层的问题,那么再一步步排查——>最后发现是reset放的位置有问题导致了第一个数据没有被reset,mem = 0 而不是 0.5 * thresh
对于理论和实验没对上的情况,一定要找到原因,一定不能任其不管,“不行也要给出不行的理由”
你如果假装看不见那0.2的L1 distance,那么你只是在自欺欺人。如果对待什么事情都是这种态度,不如不干。自欺欺人做出来的成果自己也没有成就感。

在这里插入图片描述

debug 用到的代码:

starttime = time.strftime("%Y-%m-%d_%H:%M:%S")
writer = SummaryWriter(log_dir='logs/'+ starttime[:16], comment=starttime[:16])
ann_outs, snn_outs = [], []
ann_inputs, snn_inputs = [], []
def ann_layer_hook(module, input, output):
    global ann_outs
    print("==ann===")
    print(input[0].shape)
    print(output.shape)
    ann_outs.append(output.cpu())
    ann_inputs.append(input[0].cpu())
    writer.add_histogram("ann_1_layer", output.cpu())
    writer.add_histogram("ann_1_layer_input", input[0].cpu())
    # exit()
def snn_layer_hook(module, input, output):
    global snn_outs
    print("==snn===")
    print(input[0].shape)
    print(output.shape)
    snn_outs.append(output.sum(0).cpu())
    snn_inputs.append(input[0].sum(0).cpu())
    writer.add_histogram("snn_1_layer", output.cpu())
    writer.add_histogram("snn_1_layer_input", input[0].sum(0).cpu())

L1_layer = []
for index, item in enumerate(ann_outs):
        ann = ann_outs[index]
        snn = snn_outs[index]
        # writer.add_histogram("ann", ann)
        # writer.add_histogram("snn", snn)
        L1 = torch.sum(torch.abs(ann-snn)) / ann.numel()
        print(L1)
        input_loss = torch.sum(torch.abs(ann_inputs[index].squeeze(0)-snn_inputs[index])) / ann.numel()
        print(input_loss)

这就是差距:
请坚持你认为正确的事情。
tensor(0.1597)
tensor(0.1400)
tensor(0.0989)
tensor(0.2375)
tensor(0.2081)

tensor(1.2237e-08)
tensor(1.9061e-09)
tensor(1.8294e-10)
tensor(3.7203e-08)
tensor(5.8208e-11)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1498472.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++精简版回顾】21.迭代器(未完成)

1.什么是迭代器&#xff1f; 用来遍历容器&#xff0c;访问容器数据。 2.迭代器使用 1.初始化 //初始化 list<int> mylist;//list的整数对象 list<int>::iterator iter;//list内部类&#xff0c;迭代器对象(正向输出) list<int>::reverse_iterator riter;//…

Android使用WebView打开网页链接(内嵌H5网页)的两种方式之一

发布Android应用&#xff0c;除了用原生开发外&#xff0c;更多是采用内嵌H5网页的方式来做&#xff0c;便于更新以及多平台使用。 一、第一种方式是直接通过WebView打开外部H5链接。 新建Android工程 直接创建一个工程&#xff0c;点击运行就可以了&#xff0c;打开是个空页…

PaddlePaddle----基于paddlehub的OCR识别

Paddlehub介绍 PaddleHub是一个基于PaddlePaddle深度学习框架开发的预训练模型库和工具集&#xff0c;提供了丰富的功能和模型&#xff0c;包括但不限于以下几种&#xff1a; 1.文本相关功能&#xff1a;包括文本分类、情感分析、文本生成、文本相似度计算等预训练模型和工具。…

基于springboot精品在线试题库系统论文

摘 要 使用旧方法对作业管理信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在作业管理信息的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。这次开发的精品在线试题库系…

022—pandas 根据时间段转换为各小时的秒数

前言 本例中&#xff0c;有一些时间段数据&#xff0c;需要将这些时间段里的时间以小时为分组&#xff0c;将24个小时段中每个小时所占用的秒数计算出来。 需求&#xff1a; 以第一条数据为例&#xff0c;它所在两个小时&#xff0c;7点段占用24分钟15秒&#xff0c;8点段54…

【一起学习Arcade】(5):属性规则实例_计算规则

属性规则可改善地理数据库数据集的编辑体验并提高数据完整性。 这些规则均为用户定义的规则&#xff0c;可用于自动填充属性、在编辑操作期间限制无效编辑&#xff0c;以及对现有要素执行质量保证检查。 属性规则分为3类&#xff1a;计算、约束和验证。 这一篇介绍计算规则&…

光谱整形1

华为张德江&#xff1a;下一代光传送网将走向400G80波WDM系统_通信世界网 (cww.net.cn) 张德江指出&#xff0c;400G WDM系统具有三大基本特征&#xff1a;支持400G80波&#xff0c;单纤32T超大容量&#xff0c;传输距离与100G相当&#xff1b;支持32维以上的光交叉&#xff1…

为什么不从独立服务器中转向云或其他方案呢?

传统的专用服务器&#xff0c;如香港服务器租赁、重庆服务器租赁等&#xff0c;是最强大、最稳定的业务托管类型之一。您将获得比任何其他托管计划更多的管理权限和卓越的性能&#xff0c;并且您可以控制整个服务器上的几乎所有内容。 当然&#xff0c;专用服务器也是在线业务…

昏暗场景增强-低照度增强-弱光增强(附代码)

引言 随着现代科技的发展&#xff0c;图像采集设备已经渗透到生活的方方面面&#xff0c;然而在昏暗场景、低照度或弱光条件下&#xff0c;图像的质量往往受到严重影响&#xff0c;表现为亮度不足、对比度低下、色彩失真以及细节丢失等问题。这类图像对于人眼识别和计算机视觉…

大数据冷热分离方案

数据冷热分离方案 1、背景 ​ 随着业务的发展&#xff0c;在线表中的数据会逐渐增加。常规业务都有冷热数据现象明显的特性&#xff08;需要访问的都是近期产生的热数据&#xff1b;时间久远的冷数据出于备份、备案溯源等诉求会进行在线保留&#xff09;。在业务表数据 量可控…

自动化测试之web自动化(Selenium)

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

基础小白快速入门并行计算------>我们为什么要学习并行计算

什么是并行计算&#xff1f; 随着计算机的不断发展&#xff0c;我们处理的数据不断变多&#xff0c;需要更大得到处理能力、我们希望计算机有着更大更强壮的计算能力&#xff0c;由于cpu的运行能力有限&#xff0c;我们便想到了将多个cpu进行串联计算问题&#xff0c;这也就是我…

第五十二回 戴宗二取公孙胜 李逵独劈罗真人-飞桨AI框架安装和使用示例

吴用说只有公孙胜可以破法术&#xff0c;于是宋江请戴宗和李逵去蓟州。两人听说公孙胜的师傅罗真人在九宫县二仙山讲经&#xff0c;于是到了二仙山&#xff0c;并在山下找到了公孙胜的家。 两人请公孙胜去帮助打高唐州&#xff0c;公孙胜说听师傅的。罗真人说出家人不管闲事&a…

接口测试,后端接口还没开发完,如何测?解决看这一篇就够了......

前言 在测试的时候经常会碰到后端开发工程师的接口还没有开发完成&#xff0c;但是测试任务已经分配过来。没有接口怎么测试呢&#xff1f; 测试人员可以通过 mock server 自己去造一个接口来访问。mock server 可用于模拟真实的接口。收到请求时&#xff0c;它会根据配置返回…

【24春招/简历】如果技术和学历不行,如何包装自己在春招中占得先机?突出你的亮点!

面试讲什么 学历&#xff1a; 行情 要美化&#xff08;吹牛&#xff09; 面试很好 技术能力 让面试官知道你会哪些技术&#xff0c;尽量细节 “熟悉spring” > ioc流程&#xff0c;Bean的生命周期&#xff0c;循环依赖&#xff0c;常见注解 熟悉redis > 缓存穿透&…

2024年AI辅助研发:科技遇上创意,无限可能的绽放

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 随着人工智能技术的持续突破与深度融合&#xff0c;2024年AI辅助研发正以前所未有的速度和规模&#xff0c;引领着科技界和工业界…

【开源】JAVA+Vue.js实现创意工坊双创管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 管理员端2.2 Web 端2.3 移动端 三、系统展示四、核心代码4.1 查询项目4.2 移动端新增团队4.3 查询讲座4.4 讲座收藏4.5 小程序登录 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的创意工坊双创管理…

个人项目介绍4:三维园区篇

个人项目介绍: 地图铁路线路篇 地球卫星篇 火车站篇 三维园区篇 项目需求&#xff1a; 1.按比例全景显示三维园区 2.精确显示园区内设备设施 3.实时显示设备报警信息 4.显示园区内摄像监控设备&#xff0c;并可点击显示监控视频流 5.显示园区内的重大危险源和风险分布 …

Ansible 基础入门

2&#xff09;Ansible 介绍 Ansible 基本概念 Ansible 是一种自动化运维工具&#xff0c;基于 Paramiko 开发的&#xff0c;并且基于模块化工作&#xff0c;Ansible 是一种集成 IT 系统的配置管理、应用部署、执行特定任务的开源平台&#xff0c;它是基于 Python 语言&#xf…

tomcat搭建个人博客 实现动静分离

jar包相关 .war&#xff1a;WebApp打包,类zip格式文件,通常包括一个应用的所有资源,比如jsp,html,配置文件等 .jar&#xff1a;EJB类文件的打包压缩类zip格式文件&#xff0c;,包括很多的class文件, 网景公司发明 .rar&#xff1a;资源适配器类打包文件&#xff0c;目前已不常…