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

news/2024/4/21 14:12:30/文章来源:https://blog.csdn.net/IsayIwant/article/details/136507959

记录两次独立解决问题的过程:
目前来看,问题分为几种:
抄代码的时候抄错了,比如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_outsprint("==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_outsprint("==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.luyixian.cn/news_show_996827.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024最新算法:斑翠鸟优化算法(Pied Kingfisher Optimizer ,PKO)求解23个基准函数

一、斑翠鸟优化算法 斑翠鸟优化算法(Pied Kingfisher Optimizer ,PKO),是由Abdelazim Hussien于2024年提出的一种基于群体的新型元启发式算法,它从自然界中观察到的斑翠鸟独特的狩猎行为和共生关系中汲取灵感。PKO 算法围绕三个不…

FPGA- RGB_TFT显示屏原理及驱动逻辑

下图是TFT显示屏的显示效果 该显示屏共分为 2 个版本,4.3 寸版本的 TFT4.3’’_V3.0 和 5.0 寸版本的 TFT5.0’’_V3.0。 两者 PCB 背板电路完全相同,接口脚位定义完全相同,接口时序完全相同,仅使用的显示屏 模组尺寸不同。设计两…

uniapp直接连接wifi(含有ios和安卓的注意事项)

前言 小程序中直接连接wifi-----微信小程序 代码 启动 //启动wifistartWifi() {return new Promise((resolve, reject) > {uni.startWifi({success: (res) > {console.log(启动wifi 成功, res)resolve(true)},fail: (err) > {console.error(启动wifi 失败, err)uni.s…

【Web安全】XSS攻击与绕过

【Web安全】XSS攻击与绕过 【Web安全靶场】xss-labs-master 1-20 文章目录 【Web安全】XSS攻击与绕过1. XSS攻击是啥?2. XSS如何发生?3. XSS分类3.1. 反射型3.2. 存储型3.3. DOM型 4. XSS攻击方式1. script标签2. img标签3. input标签4. details标签5.…

强化学习中动作价值函数和状态价值函数的联系区别?

在强化学习中,动作价值函数(Q函数)和状态价值函数(V函数)都是值函数,用于评估在不同状态或状态动作对下的值。它们之间存在联系,但有一些区别: 动作价值函数(Q函数&#…

MySQL 学习笔记(基础篇 Day2)

「写在前面」 本文为黑马程序员 MySQL 教程的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。推荐先按顺序阅读往期内容: 1. MySQL 学习笔记(基础篇 Day1) 目录 3 函数 3.1 字符串函数 3…

QPS 提升 10 倍!滴滴借助 StarRocks 物化视图实现低成本精确去重

作者:滴滴 OLAP 开发工程师 刘雨飞 小编导读: 滴滴于 2022 年引入了 StarRocks。经过一年多的努力,StarRocks 逐渐替代了原有技术栈,成为滴滴内部主要的 OLAP 引擎。截至 2023 年 12 月,滴滴已经成功建立了超过 40 个 …

解决:Information:java: javacTask: 源发行版 8 需要目标发行版 1.8

解决:Information:java: javacTask: 源发行版 8 需要目标发行版 1.8 先点击 Project Structure 查看jdk是否为1.8版本 我这jdk版本为1.8版本的,但还是运行还是报错 据以上错误显示以及上述配置,我选择的编译器是jdk1.8的,但是在i…

算法沉淀——动态规划之其它背包问题与卡特兰数(leetcode真题剖析)

算法沉淀——动态规划之其它背包问题与卡特兰数 二维费用的背包问题01.一和零02.盈利计划 似包非包组合总和 Ⅳ 卡特兰数不同的二叉搜索树 二维费用的背包问题 01.一和零 题目链接:https://leetcode.cn/problems/ones-and-zeroes/ 给你一个二进制字符串数组 strs…

论文阅读-高效构建检查点

论文标题:On Efficient Constructions of Checkpoints 摘要 高效构建检查点/快照是训练和诊断深度学习模型的关键工具。在本文中,我们提出了一种适用于检查点构建的有损压缩方案(称为LC-Checkpoint)。LC-Checkpoint同时最大化了…

使用 llama.cpp 在本地部署 AI 大模型的一次尝试

对于刚刚落下帷幕的2023年,人们曾经给予其高度评价——AIGC元年。随着 ChatGPT 的火爆出圈,大语言模型、AI 生成内容、多模态、提示词、量化…等等名词开始相继频频出现在人们的视野当中,而在这场足以引发第四次工业革命的技术浪潮里,人们对于人工智能的态度,正从一开始的…

LeetCode73题:矩阵置零(python3)

代码思路: 这里用矩阵的第一行和第一列来标记是否含有0的元素,但这样会导致原数组的第一行和第一列被修改,无法记录它们是否原本包含 0。因此我们需要额外使用两个标记变量分别记录第一行和第一列是否原本包含 0。 class Solution:def setZe…

STM32CubeMX学习笔记14 ---SPI总线

1. 简介 1.1 SPI总线介绍 SPI 是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola(摩托罗拉)首先在其MC68HCXX系列处理器上定义的。 SPI,是一种高速的,全双工,同步的通信总线,并且在…

前端实现一个绕圆心转动的功能

前言: 今天遇到了一个有意思的需求,如何实现一个元素绕某一个点来进行圆周运动,用到了一些初高中的数学知识,实现起来还是挺有趣的,特来分享🎁。 一. 效果展示 我们先展示效果,如下图所示&…

改进YOLO系列 | YOLOv5/v7 引入通用高效层聚合网络 GELAN | YOLOv9 新模块

今天的深度学习方法专注于如何设计最合适的目标函数,以使模型的预测结果最接近真实情况。同时,必须设计一个合适的架构,以便为预测提供足够的信息。现有方法忽视了一个事实,即当输入数据经过逐层特征提取和空间转换时,会丢失大量信息。本文将深入探讨数据通过深度网络传输…

视频编码中常用的测试YUV系列及说明

vcc最新规定的测试序列如下所示,对于RA和LD配置,所有序列的所有帧都需要测试,对于intra配置仅需测试前8帧。 每列含义如下: A1、A2测试序列在LD配置下编码时应编码帧数为帧率的三倍。 “M”表示在该配置下必须测试这条序列。 …

基于 LLaMA 和 LangChain 实践本地 AI 知识库

有时候,我难免不由地感慨,真实的人类世界,本就是一个巨大的娱乐圈,即使是在英雄辈出的 IT 行业。数日前,Google 正式对外发布了 Gemini 1.5 Pro,一个建立在 Transformer 和 MoE 架构上的多模态模型。可惜,这个被 Google 寄予厚望的产品并未激起多少水花,因为就在同一天…

根据标签出现的频次渲染不同大小的圆和文字,圆随机摆放且相互之间不重叠

效果图: 按每个标签出现的频次大小渲染出不同比例大小的圆,渲染的圆的宽度区间为 [40, 160] ,其中的文字的大小区间为 [12, 30] ,圆的位置随机摆放且不重叠。 根据已知条件可得出,标签中频次最高的对应圆的宽度(直径…

Mac Pro 突然不能双击打开文件夹

当Mac Pro 突然不能双击打开文件夹 不防右击看看这儿 有没有勾选 如果勾选就会在打开的瞬间 闪退关掉文件夹

如何恢复edge的自动翻译功能

介绍:对于英文不好的小伙伴,把英语翻译成中文是有帮助的,而edge可以直接对英文页面翻译这一功能更是受人喜爱,但是,最近发现这一项功能消失了。 原始界面: 下面展示如何恢复该功能。 1.打开edge&#xff…