小技巧们

2022/12/07 科研 工程 共 2181 字,约 7 分钟

这是在日常学习中积累的一些实战技巧,比较实用,但不太方便归类,所以放在这里。

数据集存放

数据集,存到一个位置就好了。。对于每个项目,不用把他们移到项目路径中的dataset下 软连接是个好东西啊:

ln -s /path/to/kitti data/kitti

学到了,向过去的自己说声,真蠢。

conda环境配置

在复现项目的时候,对每个项目建立一个虚拟环境,避免各个项目之间产生量子纠缠玄学问题,导致最后心态爆炸。但对于每个项目,从头搭建大家都共有的基础环境(torch啥的)十分痛苦。这个时候,可以用下面的命令,复制已有的环境,这样就可以在已经搭好的环境的基础上魔改了,哈哈哈。

conda create -n new_env  --clone  exist_env
  • new_env 是自己新创建的虚拟环境名称
  • exist_env 是被复制的已经存在的环境名称

参考资料: https://www.jb51.net/article/257546.htm

ssh远程断点调试

参考: https://docs.python.org/zh-cn/3/library/pdb.html

使用pip包ipdb:

pip install ipdb

使用时:

import pdb

# 在要打断点的位置输入:
pdb.set_trace()

pdb常用指令:

h(elp) [command]

不带参数时,显示可用的命令列表。参数为 command 时,打印有关该命令的帮助。help pdb 显示完整文档(即 pdb 模块的文档字符串)。由于 command 参数必须是标识符,因此要获取 ! 的帮助必须输入 help exec

w(here)

打印堆栈回溯,最新一帧在底部。有一个箭头指向当前帧,该帧决定了大多数命令的上下文。

s(tep)

运行当前行,在第一个可以停止的位置(在被调用的函数内部或在当前函数的下一行)停下。

n(ext)

继续运行,直到运行到当前函数的下一行,或当前函数返回为止。( next 和step之间的区别在于,step进入被调用函数内部并停止,而step(几乎)全速运行被调用函数,仅在当前函数的下一行停止。)

r(eturn)

继续运行,直到当前函数返回。

c(ont(inue))

继续运行,仅在遇到断点时停止。

whatis [expression]

打印 expression 的类型。

p [expression]

在当前上下文中运行 expression 并打印它的值。

备注:print() 也可以使用,但它不是一个调试器命令 — 它执行 Python print()函数。

display [expression]

如果表达式的值发生改变则显示它的值,每次将停止执行当前帧。

不带表达式则列出当前帧的所有显示表达式。

q(uit)

退出调试器。 被执行的程序将被中止。

retval

打印函数最后一次返回的返回值。

利用wget下载需要登录的数据集

https://github.com/cemsaz/city-scapes-script

vscode生成头部注释和函数注释

插件: Korofileheader

https://github.com/OBKoro1/koro1FileHeader/wiki/%E5%AE%89%E8%A3%85%E5%92%8C%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B

numpy==1.19.5和其他包要求>=1.20.0冲突时

以pomegranate包为例,安装0.14.0版本即可

pip install pomegranate==0.14.0
# 0.12.0也可以
pip install pomegranate==0.12.0

numpy会报一些奇怪的错误,通常是版本不对引起的

目前我的默认是1.24.4的版本,如果报

AttributeError: module ‘numpy‘ has no attribute ‘long‘

可以试试1.23.0版本的numpy

如果报

ValueError: numpy.ndarray size changed, may indicate binary incompatibility.

可以试试1.19.5版本的numpy

debug

vscode中如何带参数调试python程序

launch.json中写入:

{
    "version": "0.2.0",
    "configurations": [
        {
            "python": "/home/zdliu/anaconda3/envs/py37/bin/python3",  // 指定python解释器
            "name": "Python: train",
            "type": "python",
            "request": "launch",
            "program": "/home/axjia/train.py",
            "console": "integratedTerminal",
            "env": {"CUDA_VISIBLE_DEVICES":"0,1"},   // 指定显卡
            "cwd": "${workspaceFolder}",    // 工作目录
            "args": ["--train_dir", "./input/train_data",   // 命令行参数
                "--dev_dir", "./input/valid_data",
 
            ],
            "justMyCode": false   # 调试封装包里面的代码,可以在里面打断点
        }
    ]
}

调试时各种操作的含义

image.png

文档信息

Search

    Table of Contents