一、模块类:
1.if __name__ == "__main__"
# 用于检查脚本是否正在作为主程序执行,而不是被其他脚本导入为模块。
if __name__ == "__main__":
具体来说,当Python脚本运行时,解释器会设置一个特殊的变量 __name__
。如果脚本是作为主程序运行的,__name__
的值将是 "__main__"
;如果脚本是被导入为模块的,__name__
的值将是模块的名称。
因此,if __name__ == "__main__":
的目的是执行一些特定于该脚本作为主程序运行时才需要执行的代码块。这样可以确保在该脚本被导入为模块时,这些代码块不会被执行,防止不必要的副作用。
2.随机种子设置
def seed_everything(seed=11):
random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
这段代码是一个用于设置随机种子的函数。在机器学习和深度学习中,使用随机性是很常见的。但是,如果想要重复实验的结果,或者想要确保结果的可重现性,那么设置随机种子就非常重要。
具体来说,这段代码做了以下几件事情:
-
设置Python的随机数种子:通过
random.seed(seed)
设置Python的随机数生成器的种子,保证每次生成的随机数序列相同。 -
设置numpy的随机数种子:通过
np.random.seed(seed)
设置numpy的随机数生成器的种子,确保numpy生成的随机数序列是一致的。 -
设置PyTorch的随机数种子:通过
torch.manual_seed(seed)
设置PyTorch的随机数生成器的种子,以确保PyTorch中的随机数生成是可重现的。 -
设置PyTorch的CUDA随机数种子:通过
torch.cuda.manual_seed(seed)
设置PyTorch的CUDA随机数生成器的种子,以确保在使用CUDA加速的情况下,生成的随机数也是可重现的。 -
设置PyTorch的CUDA全部随机数种子:通过
torch.cuda.manual_seed_all(seed)
设置PyTorch的所有CUDA设备的随机数生成器的种子,确保在使用多个CUDA设备的情况下,生成的随机数也是可重现的。 -
禁用cuDNN的自动优化:通过
torch.backends.cudnn.deterministic = True
和torch.backends.cudnn.benchmark = False
这两行代码,禁用cuDNN的自动优化,以确保结果的可重现性。
随机性的使用:
-
数据集划分:在机器学习中,常常需要将数据集划分为训练集、验证集和测试集。通过使用随机性,可以确保每次划分的结果是不同的,避免因固定的划分方式导致对模型性能的过于乐观或悲观的评估。
-
参数初始化:深度神经网络中,模型的初始参数值通常是随机初始化的。这是因为随机的初始参数可以打破对称性,使每个神经元在学习过程中独立地学习到不同的特征。通过设置随机种子,可以确保每次运行相同的模型得到相同的参数初始化,从而方便调试和比较实验结果。
-
数据增强:在深度学习中,数据增强是一种常用的技术,它通过对训练数据进行各种随机变换(如旋转、缩放、平移、翻转等)来增加数据样本的多样性。这样可以提高模型的鲁棒性和泛化能力。设置随机种子可以确保每次使用相同的数据增强方式,从而保证实验的可重复性。
-
随机梯度下降:在训练深度神经网络时,通常使用随机梯度下降(SGD)或其变种来优化模型参数。每个训练批次的样本选择可能是随机的,这使得模型能够更好地适应不同的样本分布,从而提高泛化能力。通过设置随机种子,可以确保每次训练时使用相同的随机样本顺序,以便进行结果的可重复性比较和调试。
3. 翻译
anchor:预测框
ground truth box:真实框
二.函数类
2.1 pytorch所属函数
2.1.1. # .pow
pow(x, y[, z])函数是计算x的y次方,如果z在存在,则再对结果进行取模,其结果等效于pow(x,y) %z
参数
x -- 数值表达式。
y -- 数值表达式。
z -- 数值表达式。
2.1.2.# .contiguous
将tensor转换为.contiguous()后括号中的维度排列。
>>>torch.randn(2,3,4,5).permute(3,2,0,1).shape
# 输出结果为torch.size([5,4,2,3])
# 上面的结果等价于:
>>>torch.randn(2,3,4,5).transpose(3,0).transpose(2,1).transpose(3,2).shape
# 输出结果为torch.size([5,4,2,3])
2.2 python函数
2.2.1 len()
len()可以返回一个列表长度的数值。如果是多维度张量,那么返回的数值是张量第一维度的大小
三、Pycharm使用
3.1 快捷键
用鼠标选择函数后:
Ctrl + B:进入函数的定义。
Ctrl + Alt + B:进入函数的实现(如果有的话)。
Ctrl + Shift + I:查看函数的文档字符串。
Ctrl + Shift + T:打开一个弹出窗口,可以快速定位和进入函数、类和方法的测试用例。
Ctrl + E:打开最近打开的文件列表。
Ctrl + Shift + E:打开最近编辑的文件列表。最后鼠标点击进入函数:Ctrl + 左键单击。