解决Pytorch训练过程中loss不下降的问题
在使用Pytorch进行神经网络训练时,有时会遇到训练学习率不下降的问题。出现这种问题的可能原因有很多,包括学习率过小,数据没有进行Normalization等。不过除了这些常规的原因,还有一种难以发现的原因:在计算loss时数据维数不匹配。
下面是我的代码:
loss_function = torch.nn.MSE_loss() optimizer.zero_grad() output = model(x_train) loss = loss_function(output, y_train) loss.backward() optimizer.step()
要特别注意计算loss时网络输出值output和真实值y_train的维数必须完全匹配,否则训练误差不下降,无法训练。这种错误在训练一维数据时很容易忽略,要十分注意。
以上这篇解决Pytorch训练过程中loss不下降的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
Pytorch中accuracy和loss的计算知识点总结
这几天关于accuracy和loss的计算有一些疑惑,原来是自己还没有弄清楚. 给出实例 def train(train_loader, model, criteon, optimizer, epoch): train_loss = 0 train_acc = 0 num_correct= 0 for step, (x,y) in enumerate(train_loader): # x: [b, 3, 224, 224], y: [b] x, y = x.to(device), y.to(de
-
解决Pytorch训练过程中loss不下降的问题
在使用Pytorch进行神经网络训练时,有时会遇到训练学习率不下降的问题.出现这种问题的可能原因有很多,包括学习率过小,数据没有进行Normalization等.不过除了这些常规的原因,还有一种难以发现的原因:在计算loss时数据维数不匹配. 下面是我的代码: loss_function = torch.nn.MSE_loss() optimizer.zero_grad() output = model(x_train) loss = loss_function(output, y_train)
-
Pytorch训练网络过程中loss突然变为0的解决方案
问题 // loss 突然变成0 python train.py -b=8 INFO: Using device cpu INFO: Network: 1 input channels 7 output channels (classes) Bilinear upscaling INFO: Creating dataset with 868 examples INFO: Starting training: Epochs: 5 Batch size: 8 Learning rate: 0.001
-
Pytorch训练过程出现nan的解决方式
今天使用shuffleNetV2+,使用自己的数据集,遇到了loss是nan的情况,而且top1精确率出现断崖式上升,这显示是不正常的. 在网上查了下解决方案.我的问题是出在学习率上了. 我自己做的样本数据集比较小,就三类,每类大概三百多张,初始学习率是0.5.后来设置为0.1就解决了. 按照解决方案上写的.出现nan的情况还有以下几种: 学习率太大,但是样本数据集又很小.(我的情况) 自定义的loss除以了一个很小的数字,小到接近0. 数据不干净,数据本身就有nan,可以用numpy.isna
-
解决Pytorch 训练与测试时爆显存(out of memory)的问题
Pytorch 训练时有时候会因为加载的东西过多而爆显存,有些时候这种情况还可以使用cuda的清理技术进行修整,当然如果模型实在太大,那也没办法. 使用torch.cuda.empty_cache()删除一些不需要的变量代码示例如下: try: output = model(input) except RuntimeError as exception: if "out of memory" in str(exception): print("WARNING: out of
-
解决idea使用过程中让你觉得不爽的一些问题(小结)
每次导入一个新的 Project 项目的时候已经配置好的 maven 被还原为默认状态 如果 idea 的版本比较老的话看到的是这样的 然后再修改 Maven 配置就可以了 2.在创建或者导入 Maven 项目后,编写代码的时候总是提示不支持 Java8,编译也无法通过 我们查看 settings -> java compiler 发现编译版本是 1.8 之前的版本 解决方案:在 pom.xml 中加入 JDK 版本 <properties> <java.version>1.
-
解决Pytorch在测试与训练过程中的验证结果不一致问题
引言 今天在使用Pytorch导入此前保存的模型进行测试,在过程中发现输出的结果与验证结果差距甚大,经过排查后发现是forward与eval()顺序问题. 现象 此前的错误代码是 input_cpu = torch.ones((1, 2, 160, 160)) target_cpu =torch.ones((1, 2, 160, 160)) target_gpu, input_gpu = target_cpu.cuda(), input_cpu.cuda() model.set_input_2(
-
PyTorch训练LSTM时loss.backward()报错的解决方案
训练用PyTorch编写的LSTM或RNN时,在loss.backward()上报错: RuntimeError: Trying to backward through the graph a second time, but the buffers have already been freed. Specify retain_graph=True when calling backward the first time. 千万别改成loss.backward(retain_graph=Tru
-
解决pytorch下出现multi-target not supported at的一种可能原因
在使用交叉熵损失函数的时候,target的形状应该是和label的形状一致或者是只有batchsize这一个维度的. 如果target是这样的[batchszie,1]就会出现上述的错误. 改一下试试,用squeeze()函数降低纬度, 如果不知道squeeze怎么用的, 可以参考这篇文章.pytorch下的unsqueeze和squeeze用法 这只是一种可能的原因. 补充:pytorch使用中遇到的问题 1. load模型参数文件时,提示torch.cuda.is_available() i
-
解决Pytorch半精度浮点型网络训练的问题
用Pytorch1.0进行半精度浮点型网络训练需要注意下问题: 1.网络要在GPU上跑,模型和输入样本数据都要cuda().half() 2.模型参数转换为half型,不必索引到每层,直接model.cuda().half()即可 3.对于半精度模型,优化算法,Adam我在使用过程中,在某些参数的梯度为0的时候,更新权重后,梯度为零的权重变成了NAN,这非常奇怪,但是Adam算法对于全精度数据类型却没有这个问题. 另外,SGD算法对于半精度和全精度计算均没有问题. 还有一个问题是不知道是不是网络
-
解决Pytorch中Batch Normalization layer踩过的坑
1. 注意momentum的定义 Pytorch中的BN层的动量平滑和常见的动量法计算方式是相反的,默认的momentum=0.1 BN层里的表达式为: 其中γ和β是可以学习的参数.在Pytorch中,BN层的类的参数有: CLASS torch.nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 每个参数具体含义参见文档,需要注意的是,affine定义了BN层的
随机推荐
- SqlServer索引的原理与应用详解
- 浅析javascript 定时器
- BadCopy Pro v3.80 注册码与下载
- dell r710 服务器配置RAID5(3块硬盘做RAID5)
- 解析Java的Jackson库中对象的序列化与数据泛型绑定
- Maven+SSM框架实现简单的增删改查
- isset和empty的区别
- 用ASP做一个TOP COOL的站内搜索
- 实现论坛树型结构的具体算法
- android studio2.3如何编译动态库的过程详解
- Android开发之经典游戏贪吃蛇
- JavaScript中实现单体模式分享
- 浏览器脚本兼容 文本框中,回车键触发事件的兼容
- SQL Server将一列的多行内容拼接成一行的实现方法
- 图文详解JavaScript的原型对象及原型链
- JavaScript版本迷局介绍
- 使用C#的aforge类库识别验证码实例
- python多进程和多线程究竟谁更快(详解)
- Ubuntu16.04下安装Wechat的实现方法
- 微信小程序录音与播放录音功能