1.tqdm
tqdm是Python的进度条库,可以在长循环操作中显示进度提示
tqdm.tqdm:传入数字
from tqdm import tqdm
for i in tqdm(range(1, 5)):print(i)
使用bar_format = "{l_bar}{bar}"可以只显示进度条
from tqdm import tqdm
for i in tqdm(range(1, 5), bar_format="{l_bar}{bar}"):pass
传入字符串:
from tqdm import tqdm
for i in tqdm(["a", "b", "c"]):print(i)
tqdm.trange:用来省略的表达tqdm(range())
from tqdm import trange
for i in trange(range(1, 5)):print(i)
set_description:实现实时查看每次处理的数据
from tqdm import tqdm
pbar = tqdm(["a", "b", "c", "d"])
for c in pbar:pbar.set_description("Processing %s" % c)
上述文字转述自
Python中tqdm模块介绍_python_木南成长之路-DevPress官方社区 (csdn.net)
2.torch.backends.cudnn
cuDNN(CUDA Deep Neural NetWork library):是NVIDIA打造的针对神经网络的加速库,是一个用于深度神经网络的GPU加速库,它不是必须使用的库,但是一般会采用这个库。
torch.backends.cudnn.benchmark = True
上述代码会让程序在开始运行时花费一点额外时间为整个网络的每个卷积层搜索最适合它的卷积实现算法,进而实现网络的加速。
该代码的使用仅适用于网络结构固定(非动态变化),网络的输入形状(batch_size、图片的大小,输入的通道)是不变的,否则可能会降低运行效率。
torch.backends.cudnn.deterministic = True
上述代码的使用是为了避免因为计算的随机性造成的每次网络前馈结果略有差异引起的结果波动。
上述文字转述自:
(28条消息) torch.backends.cudnn系列用法_猜猜我是谁.+的博客-CSDN博客
torch.backends.cudnn.enabled = True
上述代码的使用在设置使用非确定性算法
3.argparse.ArgumentParser()的使用
argument模块用来进行命令行接口的编写,程序定义需要的参数,然后argument解决从sys.argv解析出参数的方式,同时argument还会自动生成帮助和使用手册,并在用户给程序差内无效参数时报出错误信息。
import argparse
paper = argparse.ArgumentParser()
上述代码用来创建解析器
paper.add_srgument(name or flags...[,action][,nargs][,const][,default][.type][,choices][,required][,help][,metavar][,dest])
下面是对上述程序的逐个参数解释:
name or flags : 字符串的名字或者列表
action : 当参数在命令行中出现时使用的动作
nargs : 应该读取的命令行个数
const : 不指定参数时的默认值
type : 命令行参数应该被转换成的类型
choices : 参数可允许的值的另一个容器
required : 可选参数是否可省略
help : 参数的帮助信息
metavar : 在usage说明中的参数名称,对于必选参数默认是参数名称,对于可选参数默认是全大写的参数名称
dest : 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线
default : 表示默认路径
paper.parse_args()
上述程序用来解析参数
exp_path = paras.exppath
上述程序用来调用参数
上述文字转述自:
(28条消息) argparse.ArgumentParser()用法解析_开心邮递员的博客-CSDN博客
4,importlib.import_module()的使用
这个函数是用来动态导入对应的配置文件运行来适应不同项目的配置需要
import importlib
params = importlib.import_module('b.c.c') #绝对导入
params = importlib.import_module('.c.c',package='b') #相对导入
上述程序为使用方法,分为绝对导入,相对导入两种
#对象中取出需要的对象
params.args #取出变量
params.c #取出class C
params.C.c #取出class C 中的c方法
上述程序为提取需要的对象使用的方法
上述文字转述自:
Python中动态导入对象importlib.import_module()的使用 - 灰信网(软件开发博客聚合) (freesion.com)
5.datetime模块中strftime/strptime函数的使用
PYthon中的datetime模块提供了日期格式和字符串格式相互转化的函数strftime/strptime
from datetime import datetime
datetime.datetime.strftime()
datetime.datetime.strptime()
上述程序中:
第一个:由日期格式转化为字符串格式的函数
第二个:由字符串格式转化为日期格式的函数
上述函数中涉及日期时间的格式化字符串,列举如下:
%a:星期几的简写
%A:星期几的全称
%b:月份的简写
%B:月份的全称
%c:标准的日期的时间串
%C:年份的后两位数字
%d:十进制表示的每月的第几天
%D:月/天/年
%e:在两字符域中,十进制表示的每月的第几天
%F:年-月-日
%g:年份的后两位数字,使用基于周的年
%G:年份,使用基于周的年
%h:简写的月份名
%H:24小时制的小时
%I:12小时制的小时
%j:十进制表示的每年的第几天
%m:十进制表示的月份
%M:十进制表示的分钟数
%n:新行符
%p:本地的AM或PM的等价显示
%r:12小时的时间
%R:显示小时和分钟:hh:mm
%S:十进制的秒数
%t:水平制表符
%T:显示时分秒
%u:每周的第几天,星期一为第一天(值从0到6,星期一为0)
%U:一年中的星期数(00-53)星期天为星期的开始
%V:每年的第几周,使用基于周的年
%w:十进制表示的星期几,(值从0到6,星期天为0)
%W:每年的第几周,把星期一作为第一天(值从0到53)
%x:标准的日期串
%X:标准的时间串
%y:不带世纪的十进制年份(值从0到99)
%Y:带世纪部分的十进制年份
%z,%Z:时区名称,如果不能得到时区名称则返回空字符%%:百分号
上述文字转自:
python中datetime模块中strftime/strptime函数的使用_python_脚本之家 (jb51.net)
5.torch.nn.DataParallel用法
torch.nn.DataParallel函数用来使用多个GPU加速训练
model = model.cuda()
device_ids = [0,1]
model = torch.nn.DataParallel(model,device_ids=device_ids)
device_ids = [0,1]
model = torch.nn.DataParallel(model,device_ids=device_ids).cuda()
上述程序为在实际使用过程中的书写方式
CLASS torch.nn.DataParallel(model,device_ids=None,output_ddevice=None,dim=0)
参数解析:
module : 表示定义的模型
device_ids:表示训练的device
output_device:表示输出结果的device
注:最后一个参数在一般情况下是省略不写的,那么默认就是在device_ids[0],也就是在第一块卡上,如此也就解释了为什么第一块卡的显存会占用的比其他卡要多一些
上述文字转述自:
【pytorch系列】torch.nn.DataParallel用法详解_大黑山修道-DevPress官方社区 (csdn.net)
6.torch.optim.Adam方法的使用和参数解释
Adam本质上是带有动量项的RMSprop,它利用梯度的一阶矩估计和二阶矩估计动态调整每个每个参数的学习率。它的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳
class torch.optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)
上述程序为使用格式,具体参数的定义如下:
params(iterable) : 可用于迭代优化的参数或者定义参数组的dicts
lr(float,optional): 学习率(默认:1e-3)
betas(Tuple[float,float],optional):用于计算梯度的平均和平方的系数(默认:(0.9,0.999))
eps(float,optional): 为了提高数值稳定性而添加到分母的一项(默认:1e-8)
weight_decay(float,optional): 权重衰减(如L2惩罚)(默认:0)
step(closure=None)函数: 执行单一的优化步骤
closure(callable,optional): 用于重新评估模型并返回损失的一个闭包
注:
lr : 同时也可称为学习率或步长因子,它控制了权重的更新比率(如 0.001) 较大的值(如0.3)在学习率更新前会有更快的初始学习,而较小的值(如1.0E-5)会令训练收敛到更好的性能。
betas = (beta1,beta2)
beta1 :一阶矩估计的指数衰减率(如0.9)
beta2:二阶矩估计的指数衰减率(如0.999)。该超参数在稀疏梯度(如在NLP或计算机视觉任务中)中应该设置为接近1的数。
eps:epsilon:该参数是非常小的数,其为了防止在实现中除以零(如10E-8)
Adam的特点有:
1、结合了Adagrad善于处理系数梯度和RMSprop善于处理非平稳目标的优点
2、对内存需求较小
3、为不同的参数计算不同的自适应学习率
4、也适用于大多非凸优化-使用于大数据集和高维空间。
上述文字转述自:
(28条消息) torch.optim优化算法理解之optim.Adam()_torch.optim.adam_shuaiqidexiaojiejie的博客-CSDN博客
(28条消息) pytorch 中 torch.optim.Adam 方法的使用和参数的解释_Ibelievesunshine的博客-CSDN博客_torch.optim.adam
7.Python中的filter()函数的使用
filter()函数用于过滤序列,过滤掉不符合条件的元素,返回符合条件的元素组成的新列表
filter(function,iterable)
注:
function 为 判断函数
iterable 为 可迭代对象
序列中的每个元素作为参数传递给函数进行判断
返回True或者False,最后将返回的True的元素放到新列表中
def is_odd(n):return n%2 == 1
lst1 = filter(is_odd,[1,2,3,4,5,6,7,8,9,10])# lst = [1,3,5,7,9]
上方程序为实例:筛选出序列中为奇数的元素
list_num = [1, 2, 3, 0, 8, 0, 3]
print(list(filter(lambda x: x, list_num)))结果为:
[1, 2, 3, 8, 3]
上方程序为实例:过滤掉列表当中的数字0
注:lambda的使用
lambda 是Python预留的关键字,lambda函数是匿名函数,lambda函数有输入和输出,lambda函数一般功能简单
lambda的使用方法固定,即定义一个lambda函数
1、将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数
栗子:add = lambda x,y:x+y 这条代码定义了加法函数lambda x,y:x+y,并将其赋值给变量add,这样变量add便成为具有加法功能的函数。
2、将lambda函数赋值给其他函数,从而将其他函数用该lambda函数替换
3、将lambda函数作为其他函数的返回值,返回给调用者
4、将lambda函数作为参数传递给其他函数
栗子:
filter函数:此时lambda函数用于指定过滤列表元素的条件
sorted函数:此时lambda函数用于指定对列表中所有元素进行排序的准则
map函数: 此时lambda函数用于指定对列表中每一个元素的共同操作
reduce函数:此时lambda函数用于指定列表中两两相邻元素的结合条件
此处文字摘自:
(28条消息) 关于Python中的lambda,这篇阅读量10万+的文章可能是你见过的最完整的讲解_肖哥shelwin的博客-CSDN博客_python lambda
list_word = ['a', 'B', 'c', 'd', 'E']
print(list(filter(lambda x: x.isupper(), list_word)))
print(list(filter(lambda x: x.islower(), list_word)))结果为:
['B', 'E']
['a', 'c', 'd']
上方程序为实例:过滤列表中数字的大小写(针对的是字母全都是大写或者小写的情况)
上述文字摘选自:
(28条消息) python 中的 filter() 函数——用于过滤序列,过滤掉不符合条件的元素,返回符合条件的元素组成新列表。_python的filter_牛牛来了的博客-CSDN博客