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

本文详细介绍了PyTorch的安装方法,包括推荐使用pip安装stable版本,以及与Python版本的匹配。讲解了PyTorch的核心概念如张量、CUDA张量、Autograd自动求导和神经网络的构建与训练过程,还提到了MNIST数据集的使用和常见包如torch、torch.nn。
摘要由CSDN通过智能技术生成

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数组将共享他们底层的内存位置,改变二者将会改变另一个

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

3.4CUDA张量

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

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

3.5Autograd:自动求导

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

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

变量(variable)

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

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

#variable自动求导
x1=Variable(torch.randn(2,2,2))
print(x1)
x2=x1+2
print(x2)
#variable可以自动求导,但是需要申请权限(require grad),不申请权限无法求导
y1=Variable(torch.ones(2,2,2),requires_grad=True)
y2=y1+2
#求导只可以求标量的导,不能对张量或则矩阵求导
#y1.backward()
g=y2.mean()
g.backward()

#取出张量中的数字
print(g.item())

输出

tensor([[[-1.4678, -1.0724],
         [ 1.5265, -0.5465]],

        [[-0.2039,  1.0672],
         [ 0.5085, -0.6216]]])
tensor([[[0.5322, 0.9276],
         [3.5265, 1.4535]],

        [[1.7961, 3.0672],
         [2.5085, 1.3784]]])
3.0

3.6 辅助功能

示例数据集下载使用

import torchvision#数据集  放在辅助模块
import torch.utils.data as data#加载数据集放在主模块
"""
# #导入数据集  一般设置四个参数   root:位置
# train:是否训练集
# download:是否下载
# transform:转换为张量
"""
train_data=torchvision.datasets.MNIST(
    root='./data',
    train=True,
    download=True,
    transform=torchvision.transforms.ToTensor()
)
test_data=torchvision.datasets.MNIST(
    root='./data',
    train=False,
    download=False,
    transform=torchvision.transforms.ToTensor()
)
print("train_data:",train_data.data.size())

输出

  warn(
Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz
Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz to ./data\MNIST\raw\train-images-idx3-ubyte.gz
100%|██████████| 9912422/9912422 [00:04<00:00, 2365825.63it/s]
Extracting ./data\MNIST\raw\train-images-idx3-ubyte.gz to ./data\MNIST\raw

Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz
Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz to ./data\MNIST\raw\train-labels-idx1-ubyte.gz
100%|██████████| 28881/28881 [00:01<00:00, 20237.61it/s]
Extracting ./data\MNIST\raw\train-labels-idx1-ubyte.gz to ./data\MNIST\raw

Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz
Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz to ./data\MNIST\raw\t10k-images-idx3-ubyte.gz
100%|██████████| 1648877/1648877 [00:05<00:00, 299618.21it/s]
Extracting ./data\MNIST\raw\t10k-images-idx3-ubyte.gz to ./data\MNIST\raw

Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz
Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz to ./data\MNIST\raw\t10k-labels-idx1-ubyte.gz
100%|██████████| 4542/4542 [00:00<?, ?it/s]
Extracting ./data\MNIST\raw\t10k-labels-idx1-ubyte.gz to ./data\MNIST\raw

train_data: torch.Size([60000, 28, 28])

3.7 构建神经网络与训练

import torchvision  # 数据集  放在辅助模块
import torch.utils.data as data  # 加载数据集放在主模块
import torch
import torch.nn as nn
#nn.Module所有神经网络的基类,需要用到它的前向、
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        # self.fc1 = nn.Linear(28*28,512)
        # self.relu = nn.ReLU()
        self.layers = nn.Sequential(
            nn.Linear(28*28,512),
            nn.ReLU(),
            nn.Linear(512,256),
            nn.ReLU(),
            nn.Linear(256,128),
            nn.ReLU(),
            nn.Linear(128,10),
            nn.Softmax()
        )
    def forward(self, x):
        output = self.layers(x)
        return output
#*********///训练网络
#1实例化网络
net=Net()
#2优化器  单独梯度更新  优化的是网络参数
optimizer=torch.optim.Adam(net.parameters())
#3损失函数  MSE均方差损失   交叉熵损失CrossEntropyLoss
#nn.MSELoss()不能直接用
# loss_func = nn.CrossEntropyLoss()
loss_func=nn.MSELoss()

#4取数据  枚举
for i in range(1000):  # 训练多少轮
    for j, (x, y) in enumerate(train):
        x=x.view(-1,28*28)#就相当于reshape,做形状变换的
        output=net(x)# 拿到结果
        y=torch.zeros(y.size(0),10).scatter_(1,y.view(-1,1),1)
        loss=loss_func(output,y)#做损失
        #*****梯度更新3步
        #清空上一次梯度
        optimizer.zero_grad()
        #计算梯度
        loss.backward()
        #更新梯度
        optimizer.step()
        if j%100==0:
            print('Epoch:',loss.item())
            print(torch.argmax(output,dim=1))

3.8常用包

torch

torch.nn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值