ICANN备稿时debug遇到的问题

包问题

  1. 装包:先用fastai
  2. 出现单击没有跳转的情况:安装pylance即可
  3. 出现了用pip3 uninstallpip3 list还有原来的numpy,然后用conda uninstall之后就行了。pip, pip3, conda这几个来回用。
    精度问题
    打印tensor数组自动保留后四位:
    是精度缩减了吗?其实是因为print访问的为_str_方法打印出来的小数只有四位,用torch.set_printoptions(precision=15)(设置小数精度显示)即可显示原来数据。
    visio图片转PDF
    overleaf插入去白边的Visio图:
    https://www.cnblogs.com/doubleyue/p/15684697.html
    如果使用visio,在保存为PDF图片时候点下选项,把打钩的都不选就好了

保存latest和best model函数

def main(if valid_loss < best_loss:is_best = Truebest_epoch = epochbest_prec = min(valid_loss,best_loss)save_checkpoint({'epoch': epoch + 1,'state_dict': model.state_dict(),'best_prec': best_prec,'optimizer': optimizer.state_dict(),}, is_best, fdir)def save_checkpoint(state, is_best, fdir):filepath = os.path.join(fdir, 'checkpoint.pth')torch.save(state, filepath) # latestif is_best: # bestshutil.copyfile(filepath, os.path.join(fdir, 'model_best.pth.tar'))

extra_repr
extra_repr 是 Python 中一种特殊的方法。在 PyTorch 中,它通常用于自定义类的字符串表示形式,特别是在打印对象时。当你使用 print 函数打印一个对象时,Python 会调用该对象的 str 方法来生成可读的字符串表示形式。但是,有时 str 方法可能不够详细或不够清晰,这时可以定义 extra_repr 方法来提供额外的信息。当你使用 print 函数打印对象时,Python 会检查是否定义了 extra_repr 方法,如果定义了,则会使用该方法返回的字符串来丰富对象的字符串表示形式。
return -> str一定要return的是string
例子:

class QuantReLU(nn.ReLU):def __init__(self, inplace: bool = False):super(QuantReLU, self).__init__(inplace)def extra_repr(self) -> str:return 'clipping threshold activation alpha: {:.3f}'.format(self.act_alpha)

当你print(QuantReLU)或者print的model里面含有他时,会输出:

Dummy(
(block): Sequential(
(0): Conv1d(12, 16, kernel_size=(5,), stride=(3,))
(1): QuantReLU(clipping threshold activation alpha: 7.832)
)
)

关于torch.size():
1.相加操作要掌握

import torchsize1 = torch.Size([3, 4])
size2 = torch.Size([5, 6, 7])# 将 size1 和 size2 进行相加操作
result_size = size1 + size2print(result_size)  # 输出: torch.Size([3, 4, 5, 6, 7])

2..shape返回的是torch.size()类型。
综合上述两点就可以写出以下代码:

spike_train = torch.zeros(membrane.shape[:1] + torch.Size([self.T]) + membrane.shape[1:],device=membrane.device)

state_dict
model.state_dict() 返回的是模型的参数字典,其中键是参数的名称,值是参数的张量
state_dict.pop(k) 是 Python 字典(dictionary)的一个方法,用于移除字典中键为 k 的项,并返回该项的值。

for key in checkpoint:print(key, checkpoint[key].shape)
for key in model.state_dict():print(key, model.state_dict()[key].size() or .shape)# 在 PyTorch 中,.size() 和 .shape 是等价的,两者都可以用于获取张量的形状信息。#conv1.weight 	 torch.Size([6, 3, 5, 5])
#conv1.bias 	 torch.Size([6])

原来是用的relu.thresh
要改成relu.up

keys = list(checkpoint.keys())
for key in keys:if 'thresh' in key:checkpoint[key[:-6] + 'up'] = checkpoint.pop(key)

state_dict.pop(k) 是 Python 字典(dictionary)的一个方法,用于移除字典中键为 k 的项,并返回该项的值。
由于在 Python 中字典的迭代器在遍历时不允许修改字典的结构,所以必须用keys来作为迭代。
例子二:

#Remove DataParallel wrapper 'module' 
for name in list(checkpoint['state_dict'].keys()):checkpoint['state_dict'][name[7:]] = checkpoint['state_dict'].pop(name)

torch.optim模块中的Optimizer优化器对象也存在一个state_dict对象,此处的state_dict字典对象包含state和param_groups的字典对象

for var_name in optimizer.state_dict():print(var_name,'\t',optimizer.state_dict()[var_name])
输出:
state 	 {}
param_groups 	 [{'lr': 0.001, 'momentum': 0.9, 'dampening': 0, 'weight_decay': 0, 'nesterov': False, 'params': [367949288, 367949432, 376459056, 381121808, 381121952, 381122024, 381121880, 381122168, 381122096, 381122312]}]    

网络,对不同网络层的操作
虽然表面上是说对网络以及网络层的操作,但本质上是对象和索引对象属性的问题。
有一些内置函数用来索引到对象属性:
内置函数: getattr(), setattr()

value = getattr(obj, 'attr') 
setattr(obj, 'attr', 42)

e.g.: 用于遍历索引到对象属性。

    for i in range(2, num_layers + 1):getattr(model, 'layer' + str(i)).idem = Truegetattr(snn, 'layer' + str(i)).idem = True

当没有sequential时:
print(net.fc2)
有sequential时:
print(net.fc[2])

梯度
torch.clamp是有梯度的,只有round函数需要单独考虑梯度(即写backward function)
在这里插入图片描述
round的梯度是和clip一样的。他俩都是treats the quantization and de-quantization function as if it were identity function in the clipping range and constant function outside the clipping range.

grad只要不低到0都是可以的,1e-4,1e-5,也会更新。lr * grad
alpha_new = alpha_old - learning_rate * grad_alpha

Bug
因为不懂optimizer原理犯的错误:
optimizer一定要在model settled 好之后再调用,因为有model.parameters()作为参数
这下对整个梯度的从开始到更新一轮应该比较了解了:

final_model #需要梯度的用parameter或tensor(require_grad)
optimizer = optim.Adam(final_model.parameters(), lr=0.0001)
model.train()
optimizer.zero_grad() #把optimizer存的grad清空
loss.backward() # 根据模型输出的损失值计算梯度。它会自动地沿着网络的参数计算梯度,并将梯度存储在参数的.grad属性中
nn.utils.clip_grad_norm_(model.parameters(), max_norm=10) # 会计算所有参数的梯度的范数,并根据指定的max_norm进行裁剪
optimizer.step() # 这一步是利用优化器来更新模型的参数。优化器根据梯度和指定的优化算法(如SGD、Adam等)来更新模型参数。它会使用loss.backward()计算得到的梯度来更新模型参数,通常使用学习率和其他超参数来控制更新的步长和方向。

优化器在训练过程中会存储并使用梯度来更新模型参数。每次调用optimizer.step()时,优化器会使用之前存储的梯度信息来更新模型参数。

0-d tensor 就是 scalar,不能输出他的shape

UserWarning: Detected call of lr_scheduler.step() before optimizer.step().

#scheduler.step() 不要放在这
train_acc, trian_loss= train_one_epoch(args, model, dset, optimizer, data_loader, epoch)
scheduler.step()

Loss
分类问题就无脑CE,比MSE要好。
nn.CrossEntropyLoss()=nn.LogSoftmax()+nn.NLLLoss().

optimizer
要手动将load下来的参数放到GPU上。

optimizer.load_state_dict(checkpoint['optimizer'])
for state in optimizer.state.values():for k, v in state.items():if isinstance(v, torch.Tensor):state[k] = v.cuda()

许愿第一次论文

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

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

相关文章

git问题列表(一)(持续更新中~~~)

文章目录 问题1&#xff1a;如何在本地创建git仓库&#xff0c;并推送到远程仓库&#xff1f;问题2&#xff1a;如何创建本地分支&#xff0c;并基于其创建远程分支&#xff1f;问题3&#xff1a;报错“origin does not appear to be a git repository”是什么原因&#xff1f;…

如何在Ubuntu中查看编辑lvgl的demo和examples?

如何在Ubuntu中查看编辑lvgl的demo和examples&#xff1f; 如何在 Ubuntu系统中运行查看lvgl 1、拉取代码 在lvgl的github主页面有50多个仓库&#xff0c;找到lv_port_pc_eclipse这个仓库&#xff0c;点进去 拉取仓库代码和子仓库代码 仓库网址&#xff1a;https://github…

【php基础】输出、变量、

php基础补充 1. 输出2.和"的区别3.变量3.1变量的命名规则3.2 两个对象指向同一个值3.3 可变变量 4.变量的作用域5. 检测变量 1. 输出 echo: 输出 print: 输出&#xff0c;输出成功返回1 print_r(): 输出数组 var_dump(): 输出数据的详细信息&#xff0c;带有数据类型和数…

矩阵中移动的最大次数

文章目录 所属专栏:BFS算法 题目链接 思路如下&#xff1a; 1.首先我们需要从第一列开始遍历&#xff0c;寻找每一个都能够满足条件的位置&#xff0c;将它插入到数组里面 2.第一列遍历完了后我们先判断第一列的数是否都满足条件插入到数组里面&#xff0c;如果数组为空&#…

基于粒子群算法的分布式电源配电网重构优化matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1基本PSO算法原理 4.2配电网重构的目标函数 5.完整工程文件 1.课题概述 基于粒子群算法的分布式电源配电网重构优化。通过Matlab仿真&#xff0c;对比优化前后 1.节点的电压值 2.线路的损耗,这里计…

18双体系Java学习之数组赋值和拷贝

数组赋值 数组拷贝 ★小贴士 Object src指定源数组&#xff0c; int srcPos指定复制开始的位置&#xff0c; Object dest指目标数组&#xff0c; int destPos指定复制的内容从哪个位置开始放置&#xff0c; int length 指复制的长度&#xff0c; 也就是说源数组中位置从 s…

如何使用人工智能打造超用户预期的个性化购物体验

回看我的营销职业生涯&#xff0c;我见证了数字时代如何重塑客户期望。从一刀切的方法过渡到创造高度个性化的购物体验已成为企业的关键。在这个客户期望不断变化的新时代&#xff0c;创造个性化的购物体验不再是奢侈品&#xff0c;而是企业的必需品。人工智能 &#xff08;AI&…

常见的十大网络安全攻击类型

常见的十大网络安全攻击类型 网络攻击是一种针对我们日常使用的计算机或信息系统的行为&#xff0c;其目的是篡改、破坏我们的数据&#xff0c;甚至直接窃取&#xff0c;或者利用我们的网络进行不法行为。你可能已经注意到&#xff0c;随着我们生活中越来越多的业务进行数字化&…

[数据集][目标检测]焊接件表面缺陷检测数据集VOC+YOLO格式2292张10类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2292 标注数量(xml文件个数)&#xff1a;2292 标注数量(txt文件个数)&#xff1a;2292 标注…

阿里云下载安装centos

这里以centos7.x版本下载安装为例 : 网址 : 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 点击centos : 再点击下载地址 : 找到 7/ 并点击 : 找到isos/并点击 : 点击x86_64 : 找到4.4G的文件点击下载 ; 点击创建新的虚拟机 , 然后选择典型 &#xff0c; 然后点击下一…

栈和队列(Java实现)

栈和队列&#xff08;Java实现&#xff09; 栈 栈(Stack)&#xff1a;栈是先进后出&#xff08;FILO, First In Last Out&#xff09;的数据结构。Java中实现栈有以下两种方式&#xff1a; stack类LinkedList实现&#xff08;继承了Deque接口&#xff09; &#xff08;1&am…

Docker入门一(Docker介绍、Docker整体结构、Docker安装、镜像、容器、Docker的容器与镜像)

文章目录 一、Docker介绍1.什么是虚拟化2.虚拟化模块3.docker是什么4.docker平台介绍5.为什么使用docker6.docker主要解决的问题 二、docker整体结构1.Docker引擎介绍&#xff08;Docker Engine&#xff09;2.Docker结构概览介绍3.Docker底层技术 三、docker安装1.Docker-CE和D…

Git——分支详解

目录 Git分支1、开始使用分支1.1、新增分支1.2、更改分支名称1.3、删除分支1.4、切换分支1.5、切换分支时1.6、要切换到哪个分支&#xff0c;首先要有那个分支 2、分支原理2.1、单个分支2.2、多个分支2.3、切换分支时的逻辑1、更新暂存区和工作目录2、变更HEAD的位置 2.4、如果…

GPT-4.5 Turbo详细信息被搜索引擎泄露:有重大改进

3月14日消息&#xff0c;据外电报道&#xff0c;OpenAI 最新人工智能模型 GPT-4.5 Turbo 的详细信息已通过 Bing 和 DuckDuckGo 的搜索引擎索引过早泄露。 GPT-4.5 Turbo 的产品页面在正式发布之前就出现在搜索结果中&#xff0c;引发了人们对 OpenAI 最新型号的特性和功能的猜…

每周一算法:双向深搜

题目描述 达达帮翰翰给女生送礼物&#xff0c;翰翰一共准备了 N N N 个礼物&#xff0c;其中第 i i i 个礼物的重量是 G [ i ] G[i] G[i]。 达达的力气很大&#xff0c;他一次可以搬动重量之和不超过 W W W的任意多个物品。 达达希望一次搬掉尽量重的一些物品&#xff0c;请…

微服务:Sentinel篇

1. 初识Sentinel 1.1. 雪崩问题以及解决方案 1.1.1. 雪崩问题 微服务中&#xff0c;服务间调用关系错综复杂&#xff0c;一个微服务往往依赖于多个其它微服务。 如图&#xff0c;如果服务提供者I发生了故障&#xff0c;当前的应用的部分业务因为依赖于服务I&#xff0c;因此…

静默安装OGG21.3微服务版本FOR ORACLE版本

静默安装OGG21.3微服务版本FOR ORACLE版本 silent install ogg21.3 for oracle 某度找来找去都没有找到一份可靠的静默安装OGG21.3微服务版本的案例&#xff0c;特别难受&#xff0c;为此将自己静默安装的步骤一步步贴出来分享给大家&#xff0c;请指点&#xff0c;谢谢。 至…

Web Speech API的语音识别技术

SpeechSynthesis对象 这是一个实验性技术 目前兼容性如图&#xff1a; pc端几乎兼容&#xff0c;移动端部分不兼容 网页语音 API 的SpeechSynthesis 接口是语音服务的控制接口&#xff1b; 它可以用于获取设备上关于可用的合成声音的信息&#xff0c;开始、暂停语音&#x…

软件杯 深度学习 python opencv 实现人脸年龄性别识别

文章目录 0 前言1 项目课题介绍2 关键技术2.1 卷积神经网络2.2 卷积层2.3 池化层2.4 激活函数&#xff1a;2.5 全连接层 3 使用tensorflow中keras模块实现卷积神经网络4 Keras介绍4.1 Keras深度学习模型4.2 Keras中重要的预定义对象4.3 Keras的网络层构造 5 数据集处理训练5.1 …

从电影《沙丘》说起——对人工智能的思考

从《沙丘》开始说起 之前看《沙丘》电影&#xff0c;里面有一类角色叫门泰特&#xff0c;这类人大脑可以飞快地运算&#xff0c;在电影设定里是替换人工智能、机器运算的存在。男主保罗也是这类型的人&#xff0c;但他可能基因更强大&#xff0c;吸食了香料后&#xff0c;他的…