Pytorch
文章平均质量分 60
XJTU-Qidong
现就职于沙坡村男子职业技术学院的长安区大工地分部。喜欢足球,游戏,是米兰铁粉。
展开
-
Pytorch直接在GPU上创建张量报错
Pytorch直接在GPU上创建张量报错:legacy constructor expects device type: cpubut device type: cuda was passed一般的创建张量方法:torch.Tensor(x) # x可以是list或者np.array类型但是这种创建方式默认是在把张量放在CPU(内存)中的。如果我们要使用GPU来训练模型,那么就还必须进行一步将张量复制到GPU上的操作,这样显然会费时间。之前也是看到其他文章有说可以直接在GPU上创建张量,因此自己也原创 2021-09-04 14:20:04 · 10642 阅读 · 1 评论 -
Pytorch模型测试时显存一直上升导致爆显存
问题描述首先说明: 由于我的测试集很大, 因此需要对测试集进行分批次推理.在写代码的时候发现进行训练的时候大概显存只占用了2GB左右, 而且训练过程中显存占用量也基本上是不变的. 而在测试的时候, 发现显存在每个batch数据推理后逐渐增加, 直至最后导致爆显存, 程序fail.这里放一下我测试的代码: y, y_ = torch.Tensor(), torch.Tensor() for batch in tqdm(loader): x, batch_y =原创 2021-07-30 10:27:29 · 17335 阅读 · 9 评论 -
神经网络/深度模型训练Debug过程中一些总结和经验
神经网络/模型训练Debug深度模型的Debug与一般程序的Debug有很大的不同. 一般程序的Debug通常可以通过简单地打断点调试出来. 而深度模型通常会出现程序的所有模块都可以正常跑通, 但就是模型效果与正常情况相去甚远, 这种Debug就非常的困难.尤其对于大模型来说, 一处"笔误"可能也会导致很大的问题.因此, 这里总结常见的Bug以及Debug经验.常见Bug1. 某一部分参数梯度总为0可能是程序里存在"笔误", 有一部分的参量并没有加入模型中进行运算2. Loss不下降(未完待原创 2021-03-18 15:19:28 · 3069 阅读 · 0 评论 -
pytorch中不定长序列补齐方法
在collate_fn中进行序列补齐第二种方法通常是在load一个batch数据时, 在collate_fn中进行补齐的. collate_fn使用方法以下给出两种思路:第一种思路是比较容易想到的, 就是对一个batch的样本进行遍历, 然后使用np.pad对每一个样本进行补齐.for unit in data: mask = np.zeros(max_length) s_len = len(unit[0]) # calculate the length of原创 2021-03-11 16:14:06 · 7713 阅读 · 0 评论 -
pytorch中collate_fn函数的使用&如何向collate_fn函数传参
1.为什么要使用collate_fn这里先从dataset的运行机制讲起.在dataloader按照batch进行取数据的时候, 是取出大小等同于batch size的index列表; 然后将列表列表中的index输入到dataset的getitem()函数中,取出该index对应的数据; 最后, 对每个index对应的数据进行堆叠, 就形成了一个batch的数据.看这个视频可以理解得更透彻一些⚠️ 在最后一步堆叠的时候可能会出现问题: 如果一条数据中所含有的每个数据元的长度不同, 那么将无法进行堆原创 2021-03-08 09:43:41 · 45440 阅读 · 10 评论 -
使用Pytorch的dataloader时报错每个tensor的维度不一样
使用pytorch的dataloader报错:RuntimeError: stack expects each tensor to be equal size, but got [2] at entry 0 and [1] at entry 11. 问题描述报错定位:位于定义dataset的代码中def __getitem__(self, index): ... return y #此处报错报错内容: File "D:\python\lib\site-packages\torch\u原创 2020-11-19 20:22:25 · 34915 阅读 · 8 评论 -
模型训练过程中产生NAN的原因分析
模型训练过程中产生NAN的原因分析在模型的训练过程中发现,有时在经过多轮训练后loss会突然变为nan。loss变为nan也就使权重更新后的网络里的参数变为了nan,这样就使整个训练无法再进行下去了。1. nan的来源从调试情况来看nan出现的顺序是:loss的梯度 --> 网络的参数 --> 预测的结果 --> loss本身。注意,第一个出现问题的应该是loss的梯度。2. 可能1:torch.sqrt()一般sqrt函数的定义域为:[0,无穷大)torch.sqrt()的原创 2020-07-29 22:34:41 · 18025 阅读 · 8 评论 -
使用Pytorch的nonzero函数报warning: UserWarning: This overload of nonzero is deprecated
使用pytorch的nonzero函数报warning1.先放一下报的warning:.\torch\csrc\utils\python_arg_parser.cpp:756: UserWarning: This overload of nonzero is deprecated: nonzero(Tensor input, , Tensor out)Consider using one of the following signatures instead:nonzero(Tensor input,原创 2020-06-03 16:16:02 · 15851 阅读 · 3 评论 -
使用Pytorch训练two-head网络
使用Pytorch训练two-head网络之前有写过一篇如何使用Pytorch实现two-head(多输出)模型在那篇文章里,基本把two-head网络以及构建讲清楚了(如果不清楚请先移步至那一篇博文)。但是我后来发现之前的训练方法貌似有些问题。以前的训练方法:之前是把两个head分开进行训练的,因此每一轮训练先要对一个batch的数据进行划分,然后再分别训练两个头。代码如下:f_out_y0, _ = net(x0) _, f_out_y1 = net(x1)原创 2020-05-31 21:51:38 · 1942 阅读 · 5 评论 -
使用visdom可视化pytorch训练时报错:TypeError: Object of type Tensor is not JSON serializable
使用visdom可视化pytorch训练时报错:TypeError: Object of type Tensor is not JSON serializable今天学习使用visdom对pytorch训练过程中的loss进行可视化。部分代码如下:loss0 = criterion0(f_y0, f_out_y0, w0) + 0.01 * l2_regularization0loss1 = criterion1(f_y1, f_out_y1, w1) + 0.01 * l2_regularizati原创 2020-05-27 11:51:39 · 3982 阅读 · 1 评论 -
如何使用Pytorch实现two-head(多输出)模型
如何使用Pytorch实现two-head(多输出)模型1. two-head模型定义先放一张我要实现的模型结构图:如上图,就是一个two-head模型,也是一个但输入多输出模型。该模型的特点是输入一个x和一个t,h0和h1中只有一个会输出,所以可能这不算是一个典型的多输出模型。2.实现所遇到的困难一开始的想法:这不是很简单嘛,做一个判断不就完了,t=0时模型为前半段加h0,t=1时模...原创 2020-03-13 22:09:29 · 11231 阅读 · 17 评论