精华内容
下载资源
问答
  • 显卡的GPU利用率(GPU-util) 往往跟代码有关,有更多的io运算,cpu运算就会导致利用率变。比如打印loss, 输出图像,等等 这个时候发现,有一块卡的利用率经常跳到1%,而其他三块卡经常维持在70%以上 2.原因分析 ...

    1.GPU 占用率,利用率

    输入nvidia-smi来观察显卡的GPU内存占用率(Memory-Usage),显卡的GPU利用率(GPU-util)

    GPU内存占用率(Memory-Usage) 往往是由于模型的大小以及batch size的大小,来影响这个指标
    显卡的GPU利用率(GPU-util) 往往跟代码有关,有更多的io运算,cpu运算就会导致利用率变低。比如打印loss, 输出图像,等等

    在这里插入图片描述

    这个时候发现,有一块卡的利用率经常跳到1%,而其他三块卡经常维持在70%以上

    2.原因分析

    当没有设置好CPU的线程数时,Volatile GPU-Util参数是在反复的跳动的,0%,20%,70%,95%,0%。这样停息1-2 秒然后又重复起来。其实是GPU在等待数据从CPU传输过来,当从总线传输到GPU之后,GPU逐渐起计算来,利用率会突然升高,但是GPU的算力很强大,0.5秒就基本能处理完数据,所以利用率接下来又会降下去,等待下一个batch的传入。因此,这个GPU利用率瓶颈在内存带宽和内存介质上以及CPU的性能上面。最好当然就是换更好的四代或者更强大的内存条,配合更好的CPU。

    3.解决方法:

    (1)为了提高利用率,首先要将num_workers(线程数)设置得体,4,8,16是几个常选的几个参数。本人测试过,将num_workers设置的非常大,例如,24,32,等,其效率反而降低,因为模型需要将数据平均分配到几个子线程去进行预处理,分发等数据操作,设高了反而影响效率。当然,线程数设置为1,是单个CPU来进行数据的预处理和传输给GPU,效率也会低。其次,当你的服务器或者电脑的内存较大,性能较好的时候,建议打开pin_memory打开,就省掉了将数据从CPU传入到缓存RAM里面,再给传输到GPU上;为True时是直接映射到GPU的相关内存块上,省掉了一点数据传输时间。

    (2) 另外的一个方法是,在PyTorch这个框架里面,数据加载Dataloader上做更改和优化,包括num_workers(线程数),pin_memory,会提升速度。解决好数据传输的带宽瓶颈和GPU的运算效率低的问题。在TensorFlow下面,也有这个加载数据的设置。

    (3) 修改代码(我遇到的问题)

    每个iteration 都写文件了,这个就会导致cpu 一直运算,GPU 等待

    在这里插入图片描述
    https://blog.csdn.net/qq_32998593/article/details/92849585

    展开全文
  • 训练集明明很高,验证集,测试集精度却很低

    万次阅读 多人点赞 2020-04-30 22:53:39
    2.learning rate 比较,又没有设置任何防止过拟合的机制 解决方法主要包括 1.简化模型,利用现有深度学习手段增加数据(翻转,平移,随机裁剪,imgaug) 2.利用 dropout层 3.利用正则化 2.你犯了错误:没有把数据...

    损失函数一直在下降,为什么识别率上不去。

    1.最常见的原因:过拟合

    过拟合值得单独开个章节。主要包括

    1.数据量小,网络复杂

    2.learning rate 比较高,又没有设置任何防止过拟合的机制

    解决方法主要包括

    1.简化模型,利用现有深度学习手段增加数据(翻转,平移,随机裁剪,imgaug)

    2.利用 dropout层

    3.利用正则化

    2.你犯了错误:没有把数据规格化

    图片的话,img/255是肯定的

    3.你犯了错误:没有在分验证集之前打乱数据

    因为validation_split操作不会为你shuffle数据,所以如果你的数据前一半标签全是1 ,后一半全是0,validation=0.5。恭喜你,你压根也分不对,你的validation准确率会一直为0.因为你拿所有的正样本训练,却想判断负样本。

    4.你犯了错误,数据和标签没有对上

    有可能再读取自定义的数据库的时候出现问题,导致数据与标注不对应。比如第一张图片用第十张的标注

    5.你的训练数据太少,validation数据太多,类别也太多

    比如4000张训练,1000张validation,300类,这显然就是不合理的

    6.最好使用预训练的权重

    大多数流行的backone比如resnet都有再imagenet数据集上与训练过,那么使用这种权重,比起随即重新训练,显然要可靠不少,注意调整学习率。

    7.网络结构有问题

    可以通过使用现在流行的网络(resnet,unet等)替入你的代码,如果结果没有问题,你的结果有问题那么肯定就是你网络结构出问题了。那么可以通过逐层注释掉排查究竟哪里出了问题

    7.1 网络最后一层没有使用正确的激活函数
    比如多类的应该使用softmax

    8.relu后面是softmax

    有一些说法是relu由于对于很大的数值直接复制,所以会对softmax产生不好的影响,从而输出不好的结果。所以可以使用tanh代替relu。

    9.batch normalization需要batch size至少16张

    https://mp.csdn.net/postedit/89456400

    由于做dense prediction图片通常比较大。所以一个batch一般都只有1-2张图片,不建议使用 BN。

    因为BN一般是16张图片以上一起跑。所以吧,如果是BN,那么请用多GPU,16以上的batch size。s

    另外keras TF1.x可能会出问题,https://github.com/keras-team/keras/pull/9965

    10.你犯了错误,你可能设置了一些参数是不可训练的

    在训练语句之前,检查以下你的trainable参数,是否设置了一些参数是不可训练的。这还可能导致你的输出只能是一个值,比如永远预测为标注0,因为你只有一点点的参数,而这并不是一个模型(比如只有100个参数是可以训练的,太简单了,无法模拟)。

    11.附送一个调参论文

    Bag of Tricks for Image Classification with Convolutional Neural Networks

    https://arxiv.org/abs/1812.01187

    原文链接:https://blog.csdn.net/u013249853/article/details/89393982

    展开全文
  • TensorFlow学习- GPU显存占满而利用率(util)很低原因&提高方法_m0_38064529的博客-CSDN博客 https://blog.csdn.net/m0_38064529/article/details/103168172 参考1: TensorFlow如何提高GPU训练效率和利用率 ...

    TensorFlow学习- GPU显存占满而利用率(util)很低原因&提高方法_m0_38064529的博客-CSDN博客
    https://blog.csdn.net/m0_38064529/article/details/103168172

    参考1:
    TensorFlow如何提高GPU训练效率和利用率
    分析显卡利用率低的原因是每个训练过程中有些进程是在CPU中执行的,像load下个batch、预处理batch、打印日志、后处理等,并且有的任务cpu和GPU是交替执行的,进一步降低了GPU利用率。
    提出了四个方式提高利用率:
    1、把代码都用tf的API重写;
    2、使用Estimator把大部分代码写进计算图
    3、使用th.data预处理数据集,并用tf.records存储
    4、用prefetch、parallel mapping使样本并行处理,不让gpu闲着

    由于是新手具体的操作过程哈没看懂,详细直接看原文。

    参考2:
    实验中GPU利用率低的可能的原因:
    作者进行试验分析出来是日志的问题,把关于权重和偏差值记录的代码注释掉之后利用率提高了。原因和上一篇差不多。

    参考3:
    GPU Memory Usage占满而GPU-Util却为0的调试
    作者的CPU全满,GPU却是0
    通过阅读官方文档分析出原因是 GPU不能计算 float64,算的话就很慢
    然后根据文档建议,使用config和warn_float64帮助找到float64的输入;之后试图设定一个cast_policy参数,自动把numpy产生的数组转换成float32失败;最后检查所有numpy调用,全部手动制定dtype=numpy.float32,执行一下某个命令,成功!

     

     

    batch size太小,导致模型的并行化程度太低。还有你的cpu、内存/显存带宽性能不足。

    https://ask.csdn.net/questions/752324

     

     

    训练效率低?GPU利用率上不去?快来看看别人家的tricks吧~ - 知乎  (推荐)
    https://zhuanlan.zhihu.com/p/53345706

     

     

     

    展开全文
  • 2.learning rate 比较,又没有设置任何防止过拟合的机制 解决方法主要包括 1.简化模型,利用现有深度学习手段增加数据(翻转,平移,随机裁剪,imgaug) 2.利用 dropout层 3.利用正则化 2.你犯了错误:没有把...

    损失函数一直在下降,为什么识别率上不去。

    ----------------2021-01-08更新-----------------------

    0.学习率设置太高,一个epoch直接收敛,所以损失不会下降

    比如学利率一开始设置为1,因为下降太快,那么很有可能在一个epoch旧完全收敛。所以看到的validation数值并不下降,第一个epoch就已经处于谷底了。所以如果使用的是系统默认的学习率,最好检查下默认值是什么。

     

    -------------------旧---------------------------------------

    1.最常见的原因:过拟合

    过拟合值得单独开个章节。主要包括

    1.数据量小,网络复杂

    2.learning rate 比较高,又没有设置任何防止过拟合的机制

    解决方法主要包括

    1.简化模型,利用现有深度学习手段增加数据(翻转,平移,随机裁剪,imgaug)

    2.利用 dropout层

    3.利用正则化

    2.你犯了错误:没有把数据规格化

    图片的话,img/255是肯定的

    3.你犯了错误:没有在分验证集之前打乱数据

    因为validation_split操作不会为你shuffle数据,所以如果你的数据前一半标签全是1 ,后一半全是0,validation=0.5。恭喜你,你压根也分不对,你的validation准确率会一直为0.因为你拿所有的正样本训练,却想判断负样本。

    4.你犯了错误,数据和标签没有对上

    有可能再读取自定义的数据库的时候出现问题,导致数据与标注不对应。比如第一张图片用第十张的标注

    5.你的训练数据太少,validation数据太多,类别也太多

    比如4000张训练,1000张validation,300类,这显然就是不合理的。

    遇到这种情况,建议:

        1.使用别的大的数据集预训练

        2.使用DATA augment

        3.可以考虑迁移学习

     

    6.最好使用预训练的权重

    大多数流行的backone比如resnet都有再imagenet数据集上与训练过,那么使用这种权重,比起随即重新训练,显然要可靠不少注意调整学习率。

    7.网络结构有问题

    可以通过使用现在流行的网络(resnet,unet等)替入你的代码,如果结果没有问题,你的结果有问题那么肯定就是你网络结构出问题了。那么可以通过逐层注释掉排查究竟哪里出了问题

    7.1 网络最后一层没有使用正确的激活函数

    比如多类的应该使用softmax

    8.relu后面是softmax

    有一些说法是relu由于对于很大的数值直接复制,所以会对softmax产生不好的影响,从而输出不好的结果。所以可以使用tanh代替relu。

    9.batch normalization需要batch size至少16张

    https://mp.csdn.net/postedit/89456400

    由于做dense prediction图片通常比较大。所以一个batch一般都只有1-2张图片,不建议使用 BN。

    因为BN一般是16张图片以上一起跑。所以吧,如果是BN,那么请用多GPU,16以上的batch size。s

    另外keras TF1.x可能会出问题,https://github.com/keras-team/keras/pull/9965

    10.你犯了错误,你可能设置了一些参数是不可训练的

    在训练语句之前,检查以下你的trainable参数,是否设置了一些参数是不可训练的。这还可能导致你的输出只能是一个值,比如永远预测为标注0,因为你只有一点点的参数,而这并不是一个模型(比如只有100个参数是可以训练的,太简单了,无法模拟)。

     

    11.附送一个调参论文

    Bag of Tricks for Image Classification with Convolutional Neural Networks

    https://arxiv.org/abs/1812.01187

    NLP 独有错误 

    最傻的错误,比如train和val使用了不一样的字典,那效果能好才怪了。。。。

    展开全文
  • tensorflow模型,4层cnn 跑出来的结果训练集能达到1,测试集准确率基本保持在0.5左右,二分类 数据有用shuffle, 有dropout,有正则化,learning rate也挺小的。 不知道是什么原因,求解答! ...
  • 训练模型的准确率很高,但是验证集准确率特别

    万次阅读 多人点赞 2019-06-01 18:11:08
    训练的loss很低,而且正确率已经很高了,但是在验证集上面,loss比较高,而且准确率特别低,还一直不稳定。 产生原因: 将每个类别的数据集中的放在一起,而且数据标签也是很集中的 model.fit(train_data, ...
  • 因为batch_norm的两个平移缩放参数在训练的时候没有更新,需要手动更新一下 step = tf.get_variable("step", [], initializer=tf.constant_initializer(0.0), trainable=False) optimizer = tf.train....
  • 训练集准确率很高,验证集准确率问题

    万次阅读 多人点赞 2020-10-08 17:01:57
    有了dropout,网络不会为任何一个特征加上很高的权重(因为那个特征的输入神经元有可能被随机删除),最终dropout产生了收缩权重平方范数的效果 10.输入到网络中的特征有问题,特征与label之间没有很明确的关联,或...
  • 使用小语料集训练,测试精准率还行,当语料集达到2000组时,问题来了,训练精准率很高,但测试精准率非常。 小语料集与大语料集测试精准率对比: 测试精准率的让人有点伤心,训练集增多,除了把batch...
  • LOAD但是CPU和IO都很低问题

    万次阅读 2015-07-13 15:36:31
    使用sar命令查看,CPU和load都不 查看进程状态 top 然后执行shift+o,进入排序页面 键入 w字母(表示按照进程状态排序),回车,然后键入R 猜测由于nfs导致问题,执行:df -h 看到有网络文件...
  • LOAD但是CPU和IO都很低问题解决

    千次阅读 2014-09-02 18:14:31
    生产环境借用别人机器的CPU LOAD居不下,合
  • 浅谈内聚耦合

    万次阅读 多人点赞 2017-06-15 13:18:01
    内聚耦合,是软件工程中的概念,是判断设计好坏的标准,主要是面向对象的设计,看类的内聚性是否,耦合度是否
  • 深度学习模型验证集准确率很低的几大原因 https://blog.csdn.net/wangdong2017/article/details/90176323
  • 压测tps很低并且呈下降趋势,原因解析
  • cpu使用率负载

    万次阅读 2018-06-17 17:42:11
    cpu而负载也就是说等待磁盘I/O完成的进程过多,就会导致队列长度过大,这样就体现到负载过大了,但实际是此时cpu被分配去执行别的任务或空闲,具体场景有如下几种。场景一:磁盘读写请求过多就会导致大量I/O等待...
  • GPU显存满了, 但是GPU利用率很低

    万次阅读 2019-06-18 11:15:27
    训练效率?GPU利用率上不去?快来看看别人家的tricks吧~ batch size太小,导致模型的并行化程度太。还有你的cpu、内存/显存带宽性能不足。
  • Linux中CPU使用率负载

    千次阅读 2017-11-14 13:40:15
    等待磁盘I/O完成的进程过多,导致进程队列长度过大,但是cpu运行的进程却少,这样就导致负载过大,但cpu使用率。 二、场景分析 (1)磁盘读写请求过多就会导致大量I/O等待 cpu的工作效率要高于磁盘,而进程在...
  • 什么是内聚耦合

    万次阅读 多人点赞 2019-07-08 17:58:04
    总是提到内聚耦合,往往同学们在学习过程中,对这个概念都不是清楚,下面我们就这个问题,简单描述,彻底搞懂什么是内聚耦合 搞清楚模块是什么 模块就是从系统层次去分成不同的部分,每个部分就是一个...
  • Tensorflow 调用GPU训练的时候经常遇见 ,显存占据的很大,但是使用率很低,也就是Zero volatile GPU-Util but high GPU Memory Usage。 网上找到这样一个答案,意思就是自己run 的很多东西是没有用的,但是会占据...
  • 钠饮食重要

    万次阅读 2011-01-10 12:26:00
    钠饮食。
  • Ubuntu16.04分辨率过,无法调

    万次阅读 2017-10-24 16:11:32
    Ubuntu16.04分辨率过,无法调 开机后,Ubuntu16.04系统的分辨率突然变,只有1280X1080和800X600,而我的显示屏的最佳分辨率是1920X080,尝试了网上的各种方法,包括使用xrandr新建分辨率或者在/etc/X11/中新建...
  • 面向对象原则:内聚、耦合。多聚合、少继承

    万次阅读 多人点赞 2017-12-18 19:28:38
    面向对象原则:内聚、耦合。多聚合、少继承要点概括【内聚、耦合】 内聚:每个模块尽可能独立完成自己的功能,不依赖于模块外部的代码。 耦合:模块与模块之间接口的复杂程度,模块之间联系越复杂耦合度越...
  • 什么是/方差、/偏差、(推荐阅读)

    万次阅读 多人点赞 2017-07-05 14:26:12
    表现出来就是,预测结果准确率很高,并且模型比较健壮(稳定),预测结果高度集中。 右上:偏差,高方差。表现出来就是,预测结果准确率较高,并且模型不稳定,预测结果比较发散。 左下:高偏差,方差。表现...
  • 小端字节序指字节数据存放在内存地址处,字节数据存放在内存地址处; 大端字节序是字节数据存放在地址处,字节数据存放在地址处。 字节 一般PC是字节序,如果按平时书写习惯,从左到右是...
  • 有朋友提问:版本cad如何打开版本图纸?遇上这种情况的朋友,一般都会陷入两难境地。想要安装一个最新版的cad软件吧,既费时又麻烦,不这么解决又打不开图纸,真的烦恼。 其实你只要转换一下思维方式,这个...
  • 如何把SQLServer数据库从版本降级到版本?

    万次阅读 多人点赞 2012-09-06 20:53:03
    由于目前还广泛使用着SQLServer2000,多公司又想使用新的SQLServer,从而直接【分离/附加】或者【备份/还原】数据库,在不同版本之间存放。往往就会遇到版本不兼容的问题。前几天遇到了从我本机2008R2上备份的一个...
  • 通过阅读官方文档分析出原因是 GPU不能计算 float64,算的话就慢 然后根据文档建议,使用config和warn_float64帮助找到float64的输入;之后试图设定一个cast_policy参数,自动把numpy产生的数组转换成float32失败...
  • 问题:显卡占用,但使用率

    万次阅读 2018-05-08 13:18:09
    cuda_visible_devices 设置可见gpu,但是会将整个gpu占满,Gpu的实际使用率很低。使用tf.configproto.gpu_optional.allow_growth属性设为True时就可以文明使用gpu。数据读取满,影响计算速度...
  • 浅谈代码中的内聚耦合

    千次阅读 2016-12-02 17:04:46
    前言 内聚耦合,是软件工程中的概念,是判断设计好坏的标准...其实结合OOP的思想,内聚应该是更加趋向于接口化,工厂模式可以容易体现这种思想。即方法调用,只要通过相应的接口,即可得到不同的实现。无需
  • 服务器load但是CPU使用率

    万次阅读 2018-08-10 15:00:33
    得到的结果差不多,连接数也不是多 4.之后又用df命令想要查看下磁盘大小 结果系统一直没有响应 ctrl+c退出之后 也没有反应 切断连接之后 重新登录服务 top看了下load又飚上去了 怀疑是不是df的进程一直在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,737,551
精华内容 695,020
关键字:

很高很低