Neo's Blog

“生活就是个缓慢受锤的过程”, 只是有的人像铁, 有的人像牛,有的人像铁牛...


  • Home

  • About

  • Archives

  • Categories

  • Tags

使用synergy连接Mac和Ubuntu:

Posted on 2021-01-10 | In 工具 / Tools
Symbols count in article: 266 | Reading time ≈ 1 mins.

使用synergy连接Mac和Ubuntu时报错time out原因

如不能在Mac和Ubuntu直接建立连接,可尝试排查以下原因:

  • 两设备版本不一致

  • 连接端口设置不一致

    一般端口默认为24800,具体端口设置和更改可以在设置中查看

  • Ubuntu上防火墙未关闭。这个是一个很隐蔽的原因,我自己遇到不能连接时,尝试了所有可能情况后才发现是这样原因。在ubuntu下关闭防火墙:

    sudo ufw disable

  • 保持两设备在同一局域网的前提下,作为client端的设备填写ip时候,优先选择192开头的那个ip地址

PyCharm更新package结构,解决unresolved Reference问题

Posted on 2020-06-27 | Edited on 2020-06-28 | In 随笔 / Writing
Symbols count in article: 298 | Reading time ≈ 1 mins.

Pycharm在更新某个包文件后,interpreter不会自动更新skeleton,导致import刚安装的package的时候会出现“unresolved Reference”错误。

解决方案:在File-setting-python interpreter中进行操作:

参考

https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000738804-How-to-update-skeletons-remote-interpreter?page=1#community_comment_115000623624

RuntimeError: invalid argument 5: k not in range for dimension at...

Posted on 2020-05-24 | In Framework
Symbols count in article: 297 | Reading time ≈ 1 mins.

问题根源

这种情况往往出现在使用pytorch训练模型过程中,调用topk方法的时候。问题根源是,传入的参数超过了该dimension的限制。
例如tmp的shape是[4,128,1],而调用了tmp.topk(129,dim=1),显然129>128是不合理的。

另一种可能是,dataloader在load数据的时候,最后一个batch只剩了一个1个数据,而由于某些squeeze的操作导致传回的结果d的shape不是[1,128,1],而是[1,128]或者[128]。这种情况下,出现了和上面相同的错误。

总之,这种错误肯定是由于传入的参数大于给定的dimension的总数据量。

pytorch只load部分网络参数

Posted on 2020-05-04 | Edited on 2020-05-05 | In 机器学习 / Machine Learning , 框架 / Framework , 工具 / Tools , 随笔 / Writing
Symbols count in article: 0 | Reading time ≈ 1 mins.

Nvidia GPU风扇转速自动调节

Posted on 2020-05-04 | In 工具 / Tools
Symbols count in article: 614 | Reading time ≈ 1 mins.

Nvidia风扇速度自动调节工具推荐

众所周知,nvidia自家的GPU设定工具nvidia-settings的风扇转速调节功能实在难用。

  • 如果使用转速自动调节模式,GPU风扇的转速跟不上散热需求变化。往往GPU温度已经70~80度了,风扇转速还是停留在40%左右的速度,温度降不下来。
  • 如果使用手动转速调节模式,首先要通过改变一堆coolbits打开手动调节功能(可搜索调节nvidia gpu风扇转速文章),然后在nvidia-settings中打开手动调节开关,再通过拖动风扇转速百分比进度条实现任意调速。这种方法也是过去我一直在使用的解决办法,但是这个方法的最大问题就是不够灵活,通常都是等模型训练起来了然后手动拉高转速降温,等训练完成再手动拉低转速减少耗电和超大的风扇噪音。

灵活而又省力的解决办法

首推一个开源的且支持pip安装的风扇调节工具:https://github.com/andyljones/coolgpus. 两行命令搞定自动设定GPU转速按需调节:

1
2
# 安装工具包
pip install coolgpus

设定与温度对应的转速调节策略:下面的命令的意思是,当GPU温度从15度变化到85度时,风扇转速从20%线性增加到90%,即随着温度升高,转速随之增加,并且增加到什么程度完全自己手动控制,完美。
1
sudo $(which coolgpus) --temp 15 80 --speed 20 95

Graph相关基础概念的理解

Posted on 2020-04-05 | Edited on 2020-04-08 | In 随笔 / Writing
Symbols count in article: 1.5k | Reading time ≈ 1 mins.

度 / 自由度的理解

  • 度(degree)/ 自由度,也叫valency(直译化合价),是指Graph(图)中一个节点,有多少条边连接其上。
  • 图的度是其所有节点的度中最大值。对于“度”的理解,结合自由度,和化合价这个英文原词来理解,本意应该是衡量一个节点与外界连通性的度量。
  • 例如在计算二阶导数时

    • 一元函数(一维函数)其公式如下,直观上可以理解为:其二阶导数等于其在所有自由度上微扰之后获得的增益。一维函数其自由度可以理解为2,分别是+1方向和-1方向.
    • 二元函数(二维函数)其二阶导数如下,直观理解时可以类比二维图像(二维图像可以看做特殊形式的二维函数),类似一维函数的二阶导数,只是二维函数的自由度更多(用于计算函数二阶导数的方向),下面公式包含了4个自由度,$(1, 0), (-1,0), (0, 1), (0, -1)$.
    • 参考链接1,其实《数字图像处理》书中对于二阶导数的定义也是考虑到了8个自由度。

      (对于图像的二阶导数)还可以任意的定义自由度,比如对角线也算的话,就是8个自由度。在卷积时,使用的拉普拉斯模板就对应着1种方式的自由度定义

综上,度的概念,虽然对于不同对象有不同的具体定义,但是直觉上理解,我认为是函数上的某点,或者Graph上某点与其周边环境(邻接的点)的连通程度。一维函数上一点只能向左或者向右移动,因此度是2;二维函数可以向左右上下,甚至左上右下移动,因此度可以是4,8,甚至自定义更多;对于Graph上的节点node而言,其度就是连接到该节点的边的数量,同样是代表了这个节点连接到了多少个其他节点。

最后补充,这种直观上的理解对于进一步理解拉普拉斯算子(尤其是Graph上的拉普拉斯算子)有很大帮助,如链接1中提到的:

这给我们一种形象的结论:拉普拉斯算子就是在所有自由度上进行微小变化后获得的增益 (另一种说明,Informally, the Laplacian measures how different the value of f at p is from the average value of the neighbors)。

参考:

  1. http://xtf615.com/2019/02/24/gcn/

PyTorch中的loss.backward()和optimizer.step()区别

Posted on 2020-03-11 | Edited on 2020-05-26 | In 框架 / Framework
Symbols count in article: 796 | Reading time ≈ 1 mins.

一句话解释

loss.backward()作用是将当前GPU储存gradient的计算图反传;optimizer.step()是利用计算图中储存的gradient更新网络参数。

关于累加loss

一句话解释,n个backward使用一个step

详解

假如想要使用batch size(bs)为100训练模型,但是老黄卖的大memeory的卡太贵了,只能fit进batch size为10的数据,那怎么办呢?

在PyTorch中可以这样搞:使用10的bs对网络进行forward10次,每次都调用loss.backward(),但是每10次forward才调用一次optimizer.step(),这样就实现了batch size为100的效果。其原理就是step和bachward的区别。

小坑预警

pytorch中,网络每次forward都会生成一次计算图用于存储gradient,因此必须每次forward之后调用loss.bachward()反传以及清空当前计算图,否则多次forward不反传会在GPU中累加计算图,导致GPU内存不够。

Ref

  • https://www.cnblogs.com/lart/p/11628696.html
  • 半官方解释
  • https://discuss.pytorch.org/t/how-are-optimizer-step-and-loss-backward-related/7350
  • https://discuss.pytorch.org/t/pytorch-gradient-accumulation/55955
  • https://medium.com/huggingface/training-larger-batches-practical-tips-on-1-gpu-multi-gpu-distributed-setups-ec88c3e51255

一些PyTorch小细节

Posted on 2020-03-10 | Edited on 2020-04-24 | In 随笔 / Writing
Symbols count in article: 521 | Reading time ≈ 1 mins.

dataset的数据长度问题

  • 调用构建的my_dataset.__len__()获取的是数据的原始长度,比如一共有1000张图像,返回的就是1000
  • 使用len(my_dataloader)返回的是batch的数量,比如1000张图像,使用batchsize为8,那么返回的就是250.

numpy.squeeze返回值类型

对ndarray使用squeeze之后,其返回值是tuple类型,如果将这个类型的数据返回给pytorch的__getitem__方法,则最后dataset返回的数据类型为list,而不是一个torch.Tensor数据类型。

只有将ndarray数据类型返回给__getitem__,最后dataloader返回的数据类型才能自动转为torch.Tensor;

此外,函数返回值是一个ndarray和一个[]类型时,如果只用一个参数接收,那么会两个参数总体变成一个tuple。道理也非常简单,就是函数的多个返回值是个tuple中的多个元素。

Ref

  • 数据长度:, datahttps://discuss.pytorch.org/t/what-is-len-dataloader-equal-to/52472/2

多GPU运行PyTorch报错dimension specified as 0 but tensor has no dimensions

Posted on 2020-02-25 | In 机器学习 / Machine Learning , 框架 / Framework
Symbols count in article: 288 | Reading time ≈ 1 mins.

错误信息

dimension specified as 0 but tensor has no dimensions

问题原因

CrossEntropyLoss的输入必须为tensor,不能为scalar(标量),即输入的数据维度不能为None.

解决办法

使用view方法改变维度为1,如target = target.view(-1),这样假如原来target是1,使用后变为[1],维度从None变为1.

Problem Sovled.

参考

  • https://blog.csdn.net/weixin_43380510/article/details/89173892

使用Shapely中Polygon的intersection方法报错 TopologyException: Input geom 1 is invalid: Ring Self-intersection...

Posted on 2020-02-21 | Edited on 2020-02-25 | In 随笔 / Writing
Symbols count in article: 1.7k | Reading time ≈ 2 mins.

报错信息

使用shapely的Polygon类构建的多边形计算intersection的时候遇到如下报错:

1
TopologyException: Input geom 1 is invalid: Ring Self-intersection at or near point...

错误原因

给出的Polygon中包含了一个所谓的self intersection,根据报错和网上信息怀疑是因为多边形本身有重叠的部分(同一个多边形自己内部有个小多边形),示意图如下这种,大的多边形中间因为给定的坐标顺序的缘故,导致内部产生了包含其中的一个多边形。

self-intersection多边形示意

Read more »
12…6<i class="fa fa-angle-right" aria-label="Next page"></i>
江前云后

江前云后

Interested in
Deep Learning & Computer Vision
56 posts
13 categories
23 tags
GitHub zhihu Weibo
© 2021 江前云后 | 48k | 43 mins.
Powered by Hexo v4.2.0
|
Theme – NexT.Pisces v7.0.1
|