当先锋百科网

首页 1 2 3 4 5 6 7

跟着 DEEP LEARNING WITH PYTORCH: A 60 MINUTE BLITZ 学习pytorch,本人属于学了不用就忘的,跟着做一下课程笔记。

由于不想做英文教程的翻译,这里只放一些学习过程中的重点代码和自己的理解,具体完整版本可以看原文。

1.pytorch介绍

深度学习框架之一,学习掌握其使用很有必要。

2.运行环境

在colab的GPU环境中运行。

#torch引入
import torch

3.1 tensor简介

在pytorch中,通常都使用tensor(张量)来编码模型的输入输出。tensor是和数组及矩阵非常相似的一种数据结构,而与Numpy的ndarrays也非常类似。

(1) 利用固定常数或随机初始化

shape = (2,3,)#指定大小
rand_tensor = torch.rand(shape)
ones_tensor = torch.ones(shape)
zeros_tensor = torch.zeros(shape)

print(f"Random Tensor: \n {rand_tensor} \n")
print(f"Ones Tensor: \n {ones_tensor} \n")
print(f"Zeros Tensor: \n {zeros_tensor}")

output:

Random Tensor: 
 tensor([[0.0203, 0.2768, 0.8346],
        [0.6779, 0.1749, 0.3858]]) 

Ones Tensor: 
 tensor([[1., 1., 1.],
        [1., 1., 1.]]) 

Zeros Tensor: 
 tensor([[0., 0., 0.],
        [0., 0., 0.]])

(2)查看tensor的各个属性

tensor.shape 查看大小
tensor.dtype 查看数据类型
tensor.device 查看存储位置

(3)tensor的各类操作

  1. tensor.to 修改tensor存放位置至GPU
    if torch.cuda.is_available():
    tensor = tensor.to('cuda')
    
  2. tensor.cat tensor拼接 (dim=1按行 dim=0按列)
    t1 = torch.cat([torch.zeros(3,3), torch.ones(3,3)], dim=1)
    t2 = torch.cat([torch.zeros(3,3), torch.ones(3,3), ], dim=0)
    
  3. tensor * tensortensor.mul(tensor) 点乘
  4. tensor @ tensor.Ttensor.matmul(tensor.T) 矩阵乘法
  5. 下划线_ 操作后面跟下划线表示左边的变量会被修改
    tensor = torch.ones(3,3)
    tensor.add_(5)
    print(tensor)
    
    output:
    tensor([[6., 6., 6.],
        [6., 6., 6.],
        [6., 6., 6.]])
        ```
    

3.2 Torch.autograd介绍

在训练神经网络的过程中包括前向传播和反向传播两个步骤。
在前向传播的过程中:神经网络将输入数据通过一系列含参函数的运算,计算出一个对真实值的估计值。
在反向传播的过程中:神经网络将调整上述函数中的参数,使得真实值与估计值之间的误差减小。调整的步骤是从后向前进行遍历,得到误差关于参数的导数,再利用随机梯度下降来优化参数。

(1)从torchvision中加载一个预训练的resnet18模型(一种网络结构),初始化输入data和标签labels。
resnet18是一种计算机视觉中的网络结构,输入要求是3通道的图像(64643),但模型的输入要求是小批量(mini-batch)的一系列样本而不是单个样本,所以输入要是一个4D的tensor,结构为(nSamples x nChannels x Height x Width)

import torch, torchvision
model = torchvision.models.resnet18(pretrained=True)
data = torch.rand(1, 3, 64, 64)
labels = torch.rand(1, 1000)

(2)进行前向传播。(预训练的模型里已经初始化了各参数)

(3)计算Loss损失,并在error tensor上启动反向传播

loss = (prediction - labels).sum()
loss.backward()

(4)在随机梯度下降的优化器(学习率为0.1,momentum为0.9)中加载所有模型参数,并开始优化

optim = torch.optim.SGD(model.parameters(), lr=0.01, momentum = 0.9)
optim.step()

现在,你已经拥有了训练神经网络所需的一切。
剩余部分会在下节中继续补充。