当前位置:   article > 正文

01深度学习——pyTorch安装与使用_pytorch安装使用

pytorch安装使用

1 pytorch安装

根据需要选择对应的安装方式,推荐使用pip(速度较快);推荐stable版本,preview版本较新,可能不稳定。;

最新的pytorch一般需要对应最新的python,可以根据python安装对应的版本。下面这个就需要python3.8以上的版本。

地址:PyTorch

网络不好的时候可以下载到本地,在文件所在位置打开命令窗口,输入安装指令:

pip install 文件名

2 api文档查看

【布客】PyTorch 中文翻译 (apachecn.org)

3 pytorch的使用方法

3.1 pytorch是什么

pytorch是一个基于python的科学计算工具包,主要面向两种场景:

1、用于替代Numpy  ,可以使用GPU的计算力;

2、使用深度学习的研究平台,可以提供最大的灵活性和速度。

3.2 tensors

tensors(张量)类似于ndarrays,不过tensors还可以运行于GPU上以提升计算速度

3.3 Numpy转换

将torch中的张量转换为numpy中的数组或者反过来;torch张量与numpy数组将共享他们底层的内存位置,改变二者将会改变另一个

  1. #****torch与numpy互转
  2. x=torch.Tensor(5,3)
  3. a=x.numpy()#tensors转ndarray
  4. b=torch.from_numpy(a)#numpy转torch

3.4CUDA张量

使用.cuda函数可以将张量移到GPU上进行计算

  1. #cuda使用
  2. x=torch.rand(5,2)
  3. y=torch.rand(5,2)
  4. if torch.cuda.is_available():
  5. x = x.cuda()
  6. y = y.cuda()
  7. #x=x.cpu() 在算损失的时候需要转回CPU 只有在同一个位置才可以做运算 默认都是CPU,只有点了cuda之后才会在GPU上运算
  8. print("GPU")
  9. else:
  10. print("CPU")
  11. print(x+y)

3.5Autograd:自动求导

pytorch中所有神经网络的核心是autograd包

autograd包为张量上的所有操作提供了自动求导,它是一个运行时定义的框架,这意味着方向传播是根据你的代码如何运行来定义,并且每次迭代可以不同。

变量(variable)

aotugrad.variable是autograd包的核心类。它包装了张量(tensor),支持几乎所有的张量上的操作。完成前向计算,可以通过.backward()方法自动计算所有的梯度。

可以通过.data属性访问变量中的原始张量,关于这个变量的梯度被计算放入.grad属性中。

  1. #variable自动求导
  2. x1=Variable(torch.randn(2,2,2))
  3. print(x1)
  4. x2=x1+2
  5. print(x2)
  6. #variable可以自动求导,但是需要申请权限(require grad),不申请权限无法求导
  7. y1=Variable(torch.ones(2,2,2),requires_grad=True)
  8. y2=y1+2
  9. #求导只可以求标量的导,不能对张量或则矩阵求导
  10. #y1.backward()
  11. g=y2.mean()
  12. g.backward()
  13. #取出张量中的数字
  14. print(g.item())

输出

  1. tensor([[[-1.4678, -1.0724],
  2. [ 1.5265, -0.5465]],
  3. [[-0.2039, 1.0672],
  4. [ 0.5085, -0.6216]]])
  5. tensor([[[0.5322, 0.9276],
  6. [3.5265, 1.4535]],
  7. [[1.7961, 3.0672],
  8. [2.5085, 1.3784]]])
  9. 3.0

3.6 辅助功能

示例数据集下载使用

  1. import torchvision#数据集 放在辅助模块
  2. import torch.utils.data as data#加载数据集放在主模块
  3. """
  4. # #导入数据集 一般设置四个参数 root:位置
  5. # train:是否训练集
  6. # download:是否下载
  7. # transform:转换为张量
  8. """
  9. train_data=torchvision.datasets.MNIST(
  10. root='./data',
  11. train=True,
  12. download=True,
  13. transform=torchvision.transforms.ToTensor()
  14. )
  15. test_data=torchvision.datasets.MNIST(
  16. root='./data',
  17. train=False,
  18. download=False,
  19. transform=torchvision.transforms.ToTensor()
  20. )
  21. print("train_data:",train_data.data.size())

输出

  1. warn(
  2. Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz
  3. Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz to ./data\MNIST\raw\train-images-idx3-ubyte.gz
  4. 100%|██████████| 9912422/9912422 [00:04<00:00, 2365825.63it/s]
  5. Extracting ./data\MNIST\raw\train-images-idx3-ubyte.gz to ./data\MNIST\raw
  6. Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz
  7. Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz to ./data\MNIST\raw\train-labels-idx1-ubyte.gz
  8. 100%|██████████| 28881/28881 [00:01<00:00, 20237.61it/s]
  9. Extracting ./data\MNIST\raw\train-labels-idx1-ubyte.gz to ./data\MNIST\raw
  10. Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz
  11. Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz to ./data\MNIST\raw\t10k-images-idx3-ubyte.gz
  12. 100%|██████████| 1648877/1648877 [00:05<00:00, 299618.21it/s]
  13. Extracting ./data\MNIST\raw\t10k-images-idx3-ubyte.gz to ./data\MNIST\raw
  14. Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz
  15. Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz to ./data\MNIST\raw\t10k-labels-idx1-ubyte.gz
  16. 100%|██████████| 4542/4542 [00:00<?, ?it/s]
  17. Extracting ./data\MNIST\raw\t10k-labels-idx1-ubyte.gz to ./data\MNIST\raw
  18. train_data: torch.Size([60000, 28, 28])

3.7 构建神经网络与训练

  1. import torchvision # 数据集 放在辅助模块
  2. import torch.utils.data as data # 加载数据集放在主模块
  3. import torch
  4. import torch.nn as nn
  5. #nn.Module所有神经网络的基类,需要用到它的前向、
  6. class Net(nn.Module):
  7. def __init__(self):
  8. super(Net, self).__init__()
  9. # self.fc1 = nn.Linear(28*28,512)
  10. # self.relu = nn.ReLU()
  11. self.layers = nn.Sequential(
  12. nn.Linear(28*28,512),
  13. nn.ReLU(),
  14. nn.Linear(512,256),
  15. nn.ReLU(),
  16. nn.Linear(256,128),
  17. nn.ReLU(),
  18. nn.Linear(128,10),
  19. nn.Softmax()
  20. )
  21. def forward(self, x):
  22. output = self.layers(x)
  23. return output
  24. #*********///训练网络
  25. #1实例化网络
  26. net=Net()
  27. #2优化器 单独梯度更新 优化的是网络参数
  28. optimizer=torch.optim.Adam(net.parameters())
  29. #3损失函数 MSE均方差损失 交叉熵损失CrossEntropyLoss
  30. #nn.MSELoss()不能直接用
  31. # loss_func = nn.CrossEntropyLoss()
  32. loss_func=nn.MSELoss()
  33. #4取数据 枚举
  34. for i in range(1000): # 训练多少轮
  35. for j, (x, y) in enumerate(train):
  36. x=x.view(-1,28*28)#就相当于reshape,做形状变换的
  37. output=net(x)# 拿到结果
  38. y=torch.zeros(y.size(0),10).scatter_(1,y.view(-1,1),1)
  39. loss=loss_func(output,y)#做损失
  40. #*****梯度更新3步
  41. #清空上一次梯度
  42. optimizer.zero_grad()
  43. #计算梯度
  44. loss.backward()
  45. #更新梯度
  46. optimizer.step()
  47. if j%100==0:
  48. print('Epoch:',loss.item())
  49. print(torch.argmax(output,dim=1))

3.8常用包

torch

torch.nn

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/371652
推荐阅读
相关标签
  

闽ICP备14008679号