pytorch

Pytorch

1.Pytorch安装

安装地址介绍:https://pytorch.org/get-started/locally/

带GPU安装步骤:

conda install pytorch torchvision cudatoolkit=9.0 -c pytorch

不带GPU安装步骤

1
2
conda install pytorch-cpu -c pytorch 
pip3 install torchvision

安装之后打开ipython

输入:

1
In [1]:import torch  # 不报错就没事

注意:安装模块的时候安装的是pytorch ,但是在代码中都是使用torch

2.Pytorch基本数据结构张量(Tensor)

创建

1
2
3
4
5
6
7
torch.tensor([])   # 根据提供的数据结构创建张量
torch.empty(3,4) # 创建3行4列的空tensor,会用无用数据进行填充
torch.ones([3,4]) # 创建3行4列全为一的tensor
torch.zeros([3,4]) # 创建3行4列全为0的tensor
torch.rand([3,4]) # 创建3行4列的随机tensor,随机区间是[0,1)
torch.randint(low=3,high=10,size=[3,4]) # 创建一个[low,high)之间3行4列的tensor
torch.randn([3,4]) # 创建一个均值为0,方差为1的3行4列的tensor

3.Tensor常用的属性和方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
tensor.dtype    # 获取tensor的数据类型
tensor.item() # 如果tensor中数据只有一个值时可以使用该方法获取
tensor.numpy() # 把tensor转换成numpy数组
tensor.size() # 获取tensor的形状,值由外到里排序
tensor.size(num) # 获取tensor第num阶的大小
tensor.view([num1,num2]) # 把tensor转变成num1行,num2列的tensor
tensor.transpose(num1,num2) # 把第num1阶和num2阶进行转置或tensor.t(num1,num2)
tensor.t(num1,num2) # 同上
# 从tensor取出来的值还是类型还是tensor
tensor[num1,num2:num3] # 切片和索引,第一个逗号签的表示对第一阶进行切片或索引,下面以此类推
tensor.dim() # 获取tensor的阶数
tensor.max(dim=-1) # 获取行方向最大值,并给出行方向的坐标;不输入dim值获取全局最大值
tensor1.add(tensor2) # 对tensor1和tensor2进行相加生成一个新的tensor
#也可以写成tensor1+tensor2
tensor1.add_(tensor2) # 对tensor1和tensor2进行相加生成新的tensor,并付给tensor1;注意上面有许多方法都可以在方法名后面加_使其是对数据原地修改

4.Tensor的数据类型

1
2
3
4
5
6
7
8
9
Data Type          |     dtype                      |      Tensor types
64-bit floating | torch.float64 or torch.double | torch.DoubleTensor
32-bit floating | torch.float32 or torch.float | torch.FloatTensor
16-bit floating | torch.float16 or torch.half | torch.HalfTensor
8-bit integer(unsighed)| torch.uint8 | torch.ByteTensor
8-bit integer(signed)| torch.int8 | torch.CharTensor
16-bit integer(signed)|torch.int16 or touch.short | torch.ShortTensor
32-bit integer(signed)|torch.int32 or touch.int | torch.IntTensor
64-bit integer(signed)|torch.int64 or touch.long | torch.LongTensor

5.指定GPU计算

1
2
3
4
5
6
7
8
9
torch.cuda.is_available()   # 判断是否支持GPU运算
device = torch.device("cuda:0") # 指定第一块gpu运算
gpu_tensor = torch.tensor([],device=device) # 创建适合在gpu上运行的tensor
tensor = torch.tensor([]) # 指定device,默认创建cpu的tensor
gpu_tensor = tensor.to(device) # 把cpu tensor转换成gpu的
tensor = gpu_tensor.cpu() # 把gpu tensor转换成cpu的
tensor.device # 查看该数据是适合在cpu上运行还是gpu上
# 全兼容代码
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

6.反向计算

1
2
3
4
5
6
7
8
9
10
# requires_grad和grad_fn   用于反向计算 
tensor.requires_grad # 是否记录计算过程的一个属性,默认为False
tensor.requires_grad_(True) # 就地修改tensor的requires_grad的属性
tensor.grad_fn # 查看该tensor是怎么计算来的
torch.no_gard() # 该函数以下的tensor不记录计算过程,一般搭配with上下文管理器使用,一般在评估的时候使用
# x特征矩阵和w权重矩阵经过一系列计算出输出out(损失)(都是requires_grad为True的tensor)
out.backward() # 进行反向计算;out必须为一个数
w.gard # 获取权重的倒数
tensor.data # 获取tensor中的值
tensor.detach() # 获取tensor中的值,与data的区别在于detach()可被微分

7.损失函数

1
2
torch.nn.MSELoss()   # 均方误差损失
torch.nn.CrossEntorpyLoss() # 交叉熵损失(对数自然损失)

8.优化器类

1
2
3
torch.optim.BGD(需要优化的参数,学习率)  # 梯度下降
torch.optim.SGD(参数,学习率) # 随机梯度下降
torch.optim.Adam(参数,学习率)

9.nn.Module

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
# 继承Module
class Lr(torch.nn.Module):
def __init__(self):
super(Lr, self).__init__()
# 下面就是自定义参数(Linear实际上也是实例化参数,并定义了forward方法)
self.lr1 = torch.nn.Linear(10, 2)
self.lr2 = torch.nn.Linear(2, 1)

def forward(self, x):
# 进行一次向前计算(如果是实现神经网络可以再out1和out2后面套一个函数即可)
out1 = self.lr1(x)
out2 = self.lr2(out1)
return out2

def main(x,y,num):
# 实例化模型
module = Lr().to(device)
# 定义优化器并指定优化器要优化哪些参数
optimizer = torch.optim.SGD(module.parameters(), lr=0.01)
# 定义损失函数
criterion = torch.nn.MSELoss()
# 开始循环训练
for i in range(num):
# 计算预测值
y_predict = module(x)
# 计算损失
loss = criterion(y, y_predict)
# 梯度置为零
optimizer.zero_grad()
# 计算梯度
loss.backward()
# 更新参数
optimizer.step()
print([i for i in module.parameters()])


if __name__ == '__main__':
x = torch.randn([50, 10]).to(device)
y = x * 3 + 8
main(x,y,10000)

10.Dataset数据基类

1

11.torch常用方法

1
2
torch.nn.Embedding(num_embedding, embedding_dim)
# num_embedding:词典长度;embedding_dim:每个词向量化之后的维度

未完待续。。。。。。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 zoubinbf@163.com

×

喜欢就点赞,疼爱就打赏