os.getcwd()
:功能:获取当前目录,python的工作目录。cwd = os.getcwd()
print(cwd)
打印结果:C:\Users\complexzx\Desktop
os.environ['USER']:当前使用用户。
os.environ['LC_COLLATE']:路径扩展的结果排序时的字母顺序。
os.environ['SHELL']:使用shell的类型。
os.environ['LAN']:使用的语言。
os.environ['SSH_AUTH_SOCK']:ssh的执行路径。
ps.Python argparse库用法总结 - 知乎
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
参考:最简单例子解释python的transpose函数
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
和 **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}
参考链接: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中的操作随机打乱
True
时会在每个epoch重新打乱数据(默认: False).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))