python+torch(一)

目录

1、下载

2、split()

3、torch.optim.lr_scheduler.MultiStepLR

4、DataLoader

5、torch.optim

6、torch.nn

7、zero_grad()

8、torch.nn.functional

9、 isinstance

10、PyTorch中的损失函数--L1Loss /L2Loss/SmoothL1Loss

11、np.flipud

12 Image.fromarray

13 Python 字符串索引

1. 索引获取特定偏移的元素

2. 分片提取相应部分数据

14 python 列表索引与切片

15  xml.etree.ElementTree

16、python a[:, 0:1]  originSeed[:, 0:1]

17、Python requirement 导入导出包

18、numpy.arccos

19、np.arrange

np.arange([start, ]stop, [step, ]dtype=None)


1、下载

以上说明,install和安装库的源头没关系,那怎么解决?

这里引入了另外一个镜像网站:

    pip install pyrender -i http://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com

2、split()

split(‘[’)[0] :输出[前的内容

split(‘[’)[1] :输出[后的内容

split(‘[’)[-1]:保留[后的内

example:x.split('_')[-1].split('.')[0]  #model_000008.ckpt r:000008

split(':')[0].split(',')]#[1 3 5 7]

lrepochs.split(':')[1])# (1, 3, 5, 7:2)  r:2

3、torch.optim.lr_scheduler.MultiStepLR

         torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=-1)

         milestones为一个数组,如 [50,70]. gamma为倍数。如果learning rate开始为0.01 ,则当epoch为50时变为0.001,epoch 为70 时变为0.0001。当last_epoch=-1,设定为初始lr。

4、DataLoader

DataLoader(test_dataset, args.batch_size, shuffle=False, num_workers=4, drop_last=False)  

比如:想打乱一下数据的排序,可以设置 shuffle(洗牌)为True;

比如:想数据是一捆的输入,可以设置 batch_size 的数目;

比如:想随机抽取的模式输入,可以设置 sampler 或 batch_sampler。如何定义抽样规则,可以看sampler.py脚本。这里不是重点;

比如:像多线程输入,可以设置 num_workers 的数目;

 torch.utils.data.DataLoader(

             dataset,#数据加载

              batch_size = 1,#批处理大小设置

              shuffle = False,#是否进项洗牌操作

              sampler = None,#指定数据加载中使用的索引/键的序列

               batch_sampler = None,#和sampler类似

               num_workers = 0,#是否进行多进程加载数据设置

               collat​​e_fn = None,#是否合并样本列表以形成一小批Tensor

               pin_memory = False,#如果True,数据加载器会在返回之前将Tensors复制到CUDA固定内存

               drop_last = False,#True如果数据集大小不能被批处理大小整除,则设置为删除最后一个不完整的批处理。

               timeout = 0,#如果为正,则为从工作人员收集批处理的超时值

               worker_init_fn = None )

5、torch.optim

         而torch.optim包则主要包含了用来更新参数的优化算法,比如SGD、AdaGrad、RMSProp、 Adam(使用动量和自适应学习率来加快收敛速度)等。

6、torch.nn

         torch.nn包中主要包含了用来搭建各个层的模块(Modules),比如全连接、二维卷积、池化等;torch.nn包中还包含了一系列有用的loss函数,这些函数也是在训练神经网络时必不可少的,比如CrossEntropyLoss、MSELoss等;另外,torch.nn.functional子包中包含了常用的激活函数,如relu、leaky_relu、prelu、sigmoid等。

7、zero_grad()

模型的参数梯度设成0  二种方法

model.zero_grad()
optimizer.zero_grad() # 当optimizer=optim.Optimizer(model.parameters())时,两者等效

另外Pytorch 为什么每一轮batch需要设置optimizer.zero_grad:

根据pytorch中的backward()函数的计算,当网络参量进行反馈时,梯度是被积累的而不是被替换掉;但是在每一个batch时毫无疑问并不需要将两个batch的梯度混合起来累积,因此这里就需要每个batch设置一遍zero_grad 了。

8、torch.nn.functional

https://pytorch-cn.readthedocs.io/zh/latest/package_references/functional/

9、 isinstance

isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。

sinstance() 与 type() 区别:

  • type() 不会认为子类是一种父类类型,不考虑继承关系。

  • isinstance() 会认为子类是一种父类类型,考虑继承关系

如果要判断两个类型是否相同推荐使用 isinstance()。

>>>a = 2
>>> isinstance (a,int)
True
>>> isinstance (a,str)
False
>>> isinstance (a,(str,int,list))    # 是元组中的一个返回 True
True

type() 与 isinstance()区别
class A:
    pass
 
class B(A):
    pass
 
isinstance(A(), A)    # returns True
type(A()) == A        # returns True
isinstance(B(), A)    # returns True
type(B()) == A        # returns False

10、PyTorch中的损失函数--L1Loss /L2Loss/SmoothL1Loss

L1 Loss

L2loss

SmoothL1Loss

仔细观察可以看到,当预测值和ground truth差别较小的时候(绝对值差小于1),其实使用的是L2 Loss;而当差别大的时候,是L1 Loss的平移。SooothL1Loss其实是L2Loss和L1Loss的结合,它同时拥有L2 Loss和L1 Loss的部分优点。

1. 当预测值和ground truth差别较小的时候(绝对值差小于1),梯度不至于太大。(损失函数相较L1 Loss比较圆滑)
2. 当差别大的时候,梯度值足够小(较稳定,不容易梯度爆炸)。

size_average=True or False

在pytorch中,所有的损失函数都带这个参数,默认设置为True。
当size_average为True的时候,计算出来的结果会对mini-batch取平均。反之,为False的时候,那算出来的绝对值不会除以n。

11、np.flipud

用于翻转列表,将矩阵进行上下翻转

第n行----->第1行
第n-1行----->第2行
.....................  #(这是省略号的意思)
第2行----->第n-1行
第1行----->第n行
[[1 0 0 0]
 [0 2 0 0]
 [0 0 3 0]
 [0 0 0 4]]

np.flipud(a) #执行完这句会自动输出结果
array([[0, 0, 0, 4],
       [0, 0, 3, 0],
       [0, 2, 0, 0],
       [1, 0, 0, 0]])
b=[1,2,3,4]
np.flipud(b) #执行完这句会自动输出结果
array([4,3,2,1])
c=[[1],[2],[3],[4]]
np.flipud(c) #执行完这句会自动输出结果
array([[4],
       [3],
       [2],
       [1]])

12 Image.fromarray

简而言之,就是实现array到image的转换

1. PIL image转换成array

img = np.asarray(image)

2. array转换成image

Image.fromarray(np.uint8(img))

13 Python 字符串索引

https://www.runoob.com/w3cnote/python-string-index.html

在 python 中,字符串中的字符是通过索引来提取的,索引从 0 开始。python 可以取负值,表示从末尾提取,最后一个为 -1,倒数第二个为 -2,即程序认为可以从结束处反向计数。

下面是对 python 索引和切片的总结:

1. 索引获取特定偏移的元素

  • 字符串中第一个元素的偏移为 0
  • 字符串中最后一个元素的偏移为-1
  • str[0] 获取第一个元素
  • str[-2] 获取倒数第二个元素

2. 分片提取相应部分数据

  • 通常上边界不包括在提取字符串内
  • 如果没有指定值,则分片的边界默认为0和序列的长度
  • str[1:3 ]获取从偏移为1的字符一直到偏移为3的字符串,不包括偏移为3的字符串 : "tr"
  • str[1:] 获取从偏移为1的字符一直到字符串的最后一个字符(包括最后一个字符): "tring"
  • str[:3] 获取从偏移为0的字符一直到偏移为3的字符串,不包括偏移为3的字符串 : "str"
  • str[:-1] 获取从偏移为0的字符一直到最后一个字符(不包括最后一个字符串): "strin"
  • str[:] 获取字符串从开始到结尾的所有元素 : "string"
  • str[-3:-1] 获取偏移为 -3 到偏移为 -1 的字符,不包括偏移为 -1 的字符 : "in"
  • str[-1:-3] 和 str[2:0] 获取的为空字符,系统不提示错误: ""
  • 分片的时候还可以增加一个步长,str[::2] 输出的结果为: "srn"

14 python 列表索引与切片

https://www.cnblogs.com/tinglele527/p/11678549.html

3.切片索引  例题:list2 = ['江苏','安徽','浙江','上海','山东','山西','湖南','湖北']

print(list2[2:6])   #取出“浙江”至“山西”四个元素   排号在 3 4 5 6号4个元素    值得注意的是不包括 "list2[6]” 第7个元素 

print(list2[1:6:2])  #取出“安徽”,“上海”,“山西”三个元素    从第2个元素开始取,(step 步长为2,每隔一个元素取一个),直到取到第6个元素

print(list2[-3:-1])   # 结果是:[''山西,'湖南'],此时取出来的并不包含'湖北',这种负索引的方式 换成'-1'换成0 或者是别的值都不能取出来湖北

4.无限索引 可以用[::step]来表示

print(list2[:3])    #取前3个元素

print(list2[3:])    #从3个元素后面所有的元素

print(list2[-3:])   #取最后3个元素

print(list2[::])     #取所有的元素

print(list2[::2])   #取奇数位的所有元素  1 3 5 7 ... 

易混乱区笔记:列表切片表示的时候后面标号的数字,其实标记的是真实的位置   例如:

list[6]  表示的是列表的第7号位置的元素

list[1:6] 表示的是从第2个至第6号位置的元素(6号位置元素包含在内)

15  xml.etree.ElementTree

 模块实现了一个简单高效的API,用于解析和创建XML数据

XML是一种固有的分层数据格式,最自然的表示方法是使用树。为此, ET 有两个类: ElementTree 将整个XML文档表示为一个树, Element 表示该树中的单个节点。与整个文档的交互(读写文件)通常在 ElementTree 级别完成。与单个XML元素及其子元素的交互是在 Element 级别完成的。

https://blog.csdn.net/weixin_42547344/article/details/81097633

16、python a[:, 0:1]  originSeed[:, 0:1]

X[:,0]是numpy中数组的一种写法,表示对一个二维数组,取该二维数组第一维中的所有数据,第二维中取第0个数据,直观来说,X[:,0]就是取所有行的第0个数据, X[:,1] 就是取所有行的第1个数据。

举例说明:

import numpy as np
 
X = np.array([[0,1],[2,3],[4,5],[6,7],[8,9],[10,11],[12,13],[14,15],[16,17],[18,19]])
print X[:,0]

[ 0  2  4  6  8 10 12 14 16 18]

import numpy as np

X = np.array([[0, 1], [2, 3], [4, 5], [6, 7], [8, 9], [10, 11], [12, 13], [14, 15], [16, 17], [18, 19]])
print(X[:, 1])

[ 1  3  5  7  9 11 13 15 17 19]


X = np.array([[0,1,2],[3,4,5],[6,7,8],[9,10,11],[12,13,14],[15,16,17],[18,19,20]])
print (X[:,1:3])
[[ 1  2]
 [ 4  5]
 [ 7  8]
 [10 11]
 [13 14]
 [16 17]
 [19 20]]

Process finished with exit code 0

X[n,:]是取第1维中下标为n的元素的所有值。

X[1,:]即取第一维中下标为1的元素的所有值,输出结果:

X[:,  m:n],即取所有数据的第m到n-1列数据,含左不含右

17、Python requirement 导入导出包

https://blog.csdn.net/a12355556/article/details/112094394

在使用Python的时候,需要把安装的Package通过requirements.txt导出来,一个命令便可部署新环境。

requirements.txt,是用于记录所有依赖包及其精确的版本号。

自动生成requirement.txt命令:

pip freeze > requirements.txt
  • 执行成功后,会在当前目录下自动生成requirement.txt文件

安装requirement.txt在新环境:
执行命令即可一键安装完所需要的第三方库。

pip install -r requirements.txt

18、numpy.arccos

np.arccos(2 * originSeed[:, 1:2] - 1 ) #功能:
对数组中的每个元素求其反余弦值。如果y = cos(x),那么x = arccos(y)参数:
  • 数组:这些是要计算其反cos值的数组元素。
  • Out:这是输出数组的形状。
import numpy as np 

arr = [0, 0.3, -1] 
print ("Input array : \n", arr) 

arccos_val = np.arccos(arr) 
print ("\nInverse cos values : \n", arccos_val)
Input array : 
 [0, 0.3, -1]

Inverse cos values : 
 [1.57079633 1.26610367 3.14159265]

同理 np.sin  np.arcsin np.tan np.arctan

19、np.arrange

np.arange([start, ]stop, [step, ]dtype=None)

作用:
  arange函数用于创建等差数组

start:可忽略不写,默认从0开始;起始值
stop:结束值;生成的元素不包括结束值
step:可忽略不写,默认步长为1;步长
dtype:默认为None,设置显示元素的数据类型

import numpy as np
nd1 = np.arange(5)#array([0, 1, 2, 3, 4])
nd2 = np.arange(1,5)#array([1, 2, 3, 4])
nd3 = np.arange(1,5,2)#nd3 = np.arange(1,5,2)
print(nd1)
print(nd2)
print(nd3)
[0 1 2 3 4]
[1 2 3 4]
[1 3]

猜你喜欢

转载自blog.csdn.net/Vpn_zc/article/details/112970036