python/pytorch之深度学习语法

OS模块

  • 函数os.getcwd():功能:获取当前目录,python的工作目录。
cwd = os.getcwd()
print(cwd)

打印结果:C:\Users\complexzx\Desktop
  • os.environ[ ]
os.environ['USER']:当前使用用户。
os.environ['LC_COLLATE']:路径扩展的结果排序时的字母顺序。
os.environ['SHELL']:使用shell的类型。
os.environ['LAN']:使用的语言。
os.environ['SSH_AUTH_SOCK']:ssh的执行路径。


参数解析器metavar和help的区别

ps.Python argparse库用法总结 - 知乎

  • help用来写入信息地址。
  • metavar个性化显示帮助信息
C:\Users\LS\code_python>python test.py -h
usage: test.py [-h] [--age AGE] name

a test

positional arguments:
  name

optional arguments:
  -h, --help         show this help message and exit
  --age AGE, -a AGE

其中,可以注意到 usage: test.py [-h] [--age AGE] name
这里系统用AGE代指我要输入的age参数,用name代指我要输入的name参数。

-------------------------------------
此时如果我设置metavar如下:
import argparse

parser = argparse.ArgumentParser(description='a test')
parser.add_argument('name',metavar='xixi')
parser.add_argument('--age','-a',type=int, default='17',metavar='hahahaha')

args = parser.parse_args()

-------------------------------------
帮助信息就可以变成这样:
C:\Users\LS\code_python>python test.py -h
usage: test.py [-h] [--age hahahaha] xixi

a test

positional arguments:
  xixi

optional arguments:
  -h, --help            show this help message and exit
  --age hahahaha, -a hahahaha

 transpose详解

参考:最简单例子解释python的transpose函数

python datetime模块用strftime 格式化时间

import datetime
datetime.datetime.now()
#这个会返回 microsecond。因此这个是我们不需要的。所以得做一下修改
datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

python中时间日期格式化符号:

%y 两位数的年份表示(00-99)

%Y 四位数的年份表示(000-9999)

%m 月份(01-12)

%d 月内中的一天(0-31)

%H 24小时制小时数(0-23)

%I 12小时制小时数(01-12)

%M 分钟数(00=59)

%S 秒(00-59)

%a 本地简化星期名称

%A 本地完整星期名称

%b 本地简化的月份名称

%B 本地完整的月份名称

%c 本地相应的日期表示和时间表示

%j 年内的一天(001-366)

%p 本地A.M.或P.M.的等价符

%U 一年中的星期数(00-53)星期天为星期的开始

%w 星期(0-6),星期天为星期的开始

%W 一年中的星期数(00-53)星期一为星期的开始

%x 本地相应的日期表示

%X 本地相应的时间表示

%Z 当前时区的名称

%% %号本身

*args,**args的详细用法

*args 和 **kwargs主要用于函数定义,你可以将不定数量的参数传递给某个函数。

*args 不定参数(不定的意思是指,预先并不知道,函数使用者会传递多少个参数给你)
*args是用来发送一个非键值对的可变数量的参数列表给一个函数。
*args的用法:当传入的参数个数未知,且不需要知道参数名称时。

**kwargs 传入键值对(例如:num1=11,num2=22)
**kwargs 允许将不定长度的键值对作为参数传递给一个函数。如果想要在一个函数里处理带名字的参数,应该使用 **kwargs。

def func_arg(farg, *args):
    print("formal arg:", farg)
    for arg in args:
        print("another arg:", arg)
func_arg(1,"youzan",'dba','hello')


# 输出结果如下:
# formal arg: 1
# another arg: youzan
# another arg: dba
# another arg: hello

------------------

#利用它转换参数为字典
def kw_dict(**kwargs):
    return kwargs
print(kw_dict(a=1,b=2,c=3))

# 输出结果如下:
# {'a': 1, 'b': 2, 'c': 3}

transforms的二十二个方法

参考链接:PyTorch 学习笔记:transforms的二十二个方法

裁剪(Crop)——
中心裁剪:transforms.CenterCrop

随机裁剪:transforms.RandomCrop
随机长宽比裁剪:transforms.RandomResizedCrop
上下左右中心裁剪:transforms.FiveCrop
上下左右中心裁剪后翻转,transforms.TenCrop

翻转和旋转(Flip and Rotation) ——依概率p水平翻转:transforms.RandomHorizontalFlip(p=0.5) 依概率p垂直翻转:transforms.RandomVerticalFlip(p=0.5)
随机旋转:transforms.RandomRotation

图像变换(resize) ——transforms.Resize
标准化:transforms.Normalize 转为tensor,并归一化至[0-1]:transforms.ToTensor
填充:transforms.Pad
修改亮度、对比度和饱和度:transforms.ColorJitter
转灰度图:transforms.Grayscale
线性变换:transforms.LinearTransformation()
仿射变换:transforms.RandomAffine
依概率p转为灰度图:transforms.RandomGrayscale
将数据转换为PILImage:transforms.ToPILImage transforms.Lambda

对transforms操作,使数据增强更灵活 transforms.RandomChoice(transforms), 从给定的一系列transforms中选一个进行操作 transforms.RandomApply(transforms, p=0.5),给一个transform加上概率,依概率进行操作 transforms.RandomOrder,将transforms中的操作随机打乱

torch.utils.data.DataLoader参数:

  • dataset (Dataset) – 加载数据的数据集。
  • batch_size (int, optional) – 每个batch加载多少个样本(默认: 1)。
  • shuffle (bool, optional) – 设置为True时会在每个epoch重新打乱数据(默认: False).
  • sampler (Sampler, optional) – 定义从数据集中提取样本的策略,即生成index的方式,可以顺序也可以乱序
  • num_workers (int, optional) – 用多少个子进程加载数据。0表示数据将在主进程中加载(默认: 0)
  • collate_fn (callable, optional) –将一个batch的数据和标签进行合并操作。
  • pin_memory (bool, optional) –设置pin_memory=True,则意味着生成的Tensor数据最开始是属于内存中的锁页内存,这样将内存的Tensor转义到GPU的显存就会更快一些。
  • drop_last (bool, optional) – 如果数据集大小不能被batch size整除,则设置为True后可删除最后一个不完整的batch。如果设为False并且数据集的大小不能被batch size整除,则最后一个batch将更小。(默认: False)
  • timeout,是用来设置数据读取的超时时间的,但超过这个时间还没读取到数据的话就会报错。

torch.optim

torch.optim是一个实现了多种优化算法的包,大多数通用的方法都已支持,提供了丰富的接口调用。为了使用torch.optim,需先构造一个优化器对象Optimizer,用来保存当前的状态,并能够根据计算得到的梯度来更新参数。

要构建一个优化器optimizer,你必须给它一个可进行迭代优化的包含了所有参数(所有的参数必须是变量s)的列表。 然后,您可以指定程序优化特定的选项,例如学习速率,权重衰减等。

Adam(Adaptive Moment Estimation)本质上是带有动量项的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):用于重新评估模型并返回损失的一个闭包 

Adam的特点有:
1、结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点;
2、对内存需求较小;
3、为不同的参数计算不同的自适应学习率;
4、也适用于大多非凸优化-适用于大数据集和高维空间。 


parser.add_argument('--dataset', metavar='DATASET', default='BSD500',  choices=dataset_names,
                    help='dataset type : ' +  ' | '.join(dataset_names))

你可能感兴趣的:(定义普及,python,开发语言)