Python踩坑记录&小技巧(持续更新)

本篇主要介绍一些使用的python技巧和第三方库,包括某些方法(method)的骚操作

Matplotlib-绘图库

保存图片内容溢出的问题

  • 有些图片,如果label太长,可能会出现保存区域小于原图片大小,导致部分内容在保存文件中缺失的问题。在此情况下,使用 bbox_inches = 'tight' 选项:
1
2
3
4
5
6
7
import matplotlib.pyplot as plt

# 原保存方法
plt.savefig('pic.png', dpi = 1000)

# 修正后保存方法
plt.savefig('pic.png', dpi = 1000, bbox_inches = 'tight')

Numpy-矩阵运算库

np.unique 可以同时获取unique key和频数

1
outcome_s, frequency_s=np.unique(samples,return_counts=True)

np.intersect1d 可以获取两个一维数组的交集

1
2
3
A=np.array([1,2,3,4,5])
B=np.array([3,4,6,0,7])
C=np.intersect1d(A,B) # C=[3,4]

PyTorch-深度学习库

  • 重要的事情说三遍:
    • 不要将维数设为0!
    • 不要将维数设为0!
    • 不要将维度设为0!

在深度学习的消融实验中,常常需要去掉某个模块来验证其有效性。不要简单地将位数设为0!维度最少要为1.这是因为在某些版本的torch中,如果模型参数是 (N,0) 维的,那么使用torch.save()时会保存N个相应的参数值;但在torch.load()阶段,模型期望接收参数数量为0,所以模型load不进去!
{:.error}

  • 指定load模型的目标设备
1
2
3
import torch

torch.load(map_location=device)

tqdm-进度条

  • tqdm 可以枚举迭代操作,同时显示进度条——再也不用每隔多少步输出一次结果了!
  • 以下为ipython演示结果
1
2
3
4
5
6
7
8
In [22]: import tqdm
...: li = [i for i in range(999999)]
...: mn = 99999999
...: for elem in tqdm.tqdm(li,'progress:'):
...: mn = min(mn,elem)
...:
progress:: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 999999/999999 [00:00<00:00, 2086298.02it/s]