[仅为个人记录,不定期更新]
Pytorch 记录
detach().numpy() 函数
常见于从计算图中剥离损失函数,下面是 “C知道” 的解释:
detach().numpy()函数是PyTorch中的一个函数,用于将一个Tensor从计算图中分离出来,并将其转换为一个NumPy数组。这个函数通常用于将模型输出的Tensor转换为NumPy数组,以便进行后续的处理和可视化。使用detach()函数可以避免在计算图中保留不必要的计算,从而提高计算效率。同时,使用numpy()函数可以将Tensor转换为NumPy数组,方便进行各种数学运算和可视化操作。
Tensor.scatter_() 函数
src 中的元素,按照 index 被 scatter (可以理解为填充) 到目标 tensor 中,常用于生成 one-hot 编码。src 中每个元素的目标位置索引,除指定维度 (dimension == dim) 外,其他维度的索引不变,即只改变指定维度上的索引顺序 (按照 index) 。
模型参数量计算
pytorch 自带方法:
total = sum([param.nelement() for param in model.parameters()])
print("Number of parameter: %.2fM" % (total/1e6))
其他方法可参见:link- pytorch得到模型的计算量和参数量
网络搭建 tips
- 卷积层后面跟 BN 层时,根据 BN 计算的原理可知,此时设置卷积层偏置 bias 多此一举,因此不设置偏置 bias;
- 在一些卷积层模块中包含参数 inplace,如 nn.ReLU(inplace=True),当 inplace(就地计算)为 True 时,将计算得到的值直接覆盖之前的值,不利用中间变量进行存储(注:产生的计算结果不会有影响,利用 inplace 计算可以节省内/显存,同时还可以省去反复申请和释放内存的时间,但是会对原变量覆盖,主要不带来错误就用);
Python 记录
字符串 title() 函数
返回字符串的标题大小写形式,即单词的第一个字符用大写字母表示,其余所有字母用小写字母表示。
s = 'PYTHON IS GOOD!'
print(s.title())
OUTPUT: Python Is Good!
程序运行时warning警告的忽略方法
python 程序开发时,warning 通常不会影响程序运行,但会影响对其他输出的监控。
方法一:
import warnings
warnings.filterwarnings('ignore')
方法二:忽略命令行下警告错误的输出
python -W ignore yourscript.py
python 内置模块
模块1:argparse——命令行选项、参数和子命令解析器
主要有三个步骤:
1.创建 ArgumentParser() 对象
2.调用 add_argument() 方法添加参数
3.使用 parse_args() 解析添加的参数
模块2:logging——主要用于输出运行日志,可以设置输出日志的等级、日志保存路径等
相比 print,具备如下优点:
1.可以通过设置不同的日志等级,在 release 版本中只输出重要信息,而不必显示大量的调试信息;
2.print 将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据;logging 则可以由开发者决定将信息输出到什么地方,以及怎么输出;
3.和 print 相比,logging 是线程安全的。
logging.basicConfig(**kwargs):
使用默认格式化程序创建 StreamHandler 并将其添加到根日志记录器中,从而完成日志系统的基本配置。如果没有为根日志程序定义处理程序,debug()、info()、warning()、error()和 critical() 函数将自动调用 basicConfig()。
更换 pip 源的两种方法
Note:
3D Slicer 内置 pip_install 安装第三方库的地址:
/home/han/software/Slicer-5.4.0-linux-amd64/lib/Python/lib/python3.9/site-packages/
方式一:永久更换 pip 源
# 打开控制台或终端,并输入以下命令:
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
# 输出:Writing to /home/han/.config/pip/pip.conf
# 更改 pip 源后,可以通过以下命令验证:
pip config get global.index-url
方式二:临时使用 pip 源
输入“pip install xxx”,使用默认源;
插入国内镜像源地址:
pip install -i 镜像源地址 xxx
几个常用镜像源:
清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/
阿里云:https://mirrors.aliyun.com/pypi/simple/
豆瓣:https://pypi.douban.com/simple/
中科大:https://pypi.mirrors.ustc.edu.cn/simple/
中科大:https://pypi.mirrors.ustc.edu.cn/simple/
Ubuntu 记录
临时挂载硬盘
sudo mount /dev/sda5 ./USB
文件拷贝
cp [选项] 源文件或目录 目标文件或目录
-i 交互式提示
-r 递归拷贝目录及其内容
-v 显示拷贝后的路径描述
-a 保留文件的原有权限
vim 的三种工作模式
一些具体命令可参考:link
解决 NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver.
问题原因:
ubuntu 内核版本升级后,会优先使用较高的版本,ubuntu 会修改默认开机启动的内核版本(最新的)。而最新的内核版本和原来的 ubuntu 其他组件起了冲突,则导致无法连接 Nvidia 驱动了。
解决办法:
- 在(双)系统启动界面,进入“Ubuntu 高级选项”(如,索引为 1),查看旧版本内核的索引(如,索引为 2);
- 进入系统进行如下设置:
sudo gedit /etc/default/grub
# 再将进入设置 GRUB—DEFAULT
GRUB_DEFAULT="1> 2"
# 则系统启动时会自动进入 ubuntu 高级选项,并选择进入旧版本的系统
# 保存退出后,运行如下命令更新 GRUB 配置文件
sudo update-grub
- 重启系统
- 进入 Setting 中,将 ubuntu 的软件与系统更新,设置为“从不”。
为 pycharm 创建桌面快捷方式
创建快捷方式前的程序启动方式:
终端输入
pycharm.sh
桌面快捷方式的创建步骤:
- 在 /usr/share/applications 文件夹下创建 pycharm.desktop 文件
sudo vim /usr/share/applications/pycharm.desktop
注意:此时若不在命令前加 sudo,则在文件退出时会弹出报错
E212: Can’t open file for writing
这个报错是由于权限问题导致的。
- 编辑 pycharm.desktop 文件
[Desktop Entry]
Type=Application
Name=Pycharm
GenericName=Pycharm3
Comment=Pycharm3: The Python IDE
# Exec=sh /home/XXX/software/pycharm-community-2021.3.2/bin/pycharm.sh
Exec="/home/XXX/software/pycharm-community-2021.3.2/bin/pycharm.sh" %f
Icon=/home/XXX/software/pycharm-community-2021.3.2/bin/pycharm.png
Terminal=pycharm
Categories=Pycharm;
-
查看是否有效
按住 win 键,搜索 pycharm,是否出现应用图标。 -
将 /usr/share/applications/pycharm.desktop 复制到桌面
右击鼠标,选择 Allow launching。完成!
其他第三方库
opencv-python
cv2.imread()
def imread(filename: Any,
flags: Any = None) -> None
flags: 图像的通道和色彩信息(默认值为 1,即彩色图像)
flags = -1, 8 位深度,原通道
flags = 0, 8 位深度,1 通道
flags = 1, 8 位深度,3 通道
flags = 2, 原深度,1 通道
flags = 3, 原深度,3 通道
flags = 4, 8 位深度,3 通道
边界模式 BorderMode
源:link
Matplotlib
legend (图例) 定位方法
- 使用参数 loc: str or pair of floats,其内置了一些位置 (default: ‘best’):
- 使用参数 bbox_to_ancher: BboxBase, 2-tuple, or 4-tuple of floats,可以控制任意位置,坐标表示比例: