史上最全pytorch学习笔记2完结【文末附有源代码和参考书籍】

模型构造

继承MODULE类来构造模型

Module 类是 nn 模块⾥提供的⼀个模型构造类,是所有神经⽹络模块的基类,我们可以继承它来定义我们想要的模型。下⾯继承 Module 类构造本节开头提到的多层感知机。这⾥定义的 MLP 类加载了Module 类的 init 函数和 forward 函数。它们分别⽤于创建模型参数和定义前向计算。前向计算也即正向传播。

import torch
from torch import nn
class MLP(nn.Module):
    # '''声明了两个全连接层
    def __int__(self,**kwargs):
        # 调⽤MLP⽗类Block的构造函数来进⾏必要的初始化。这样在构造实例时还可
        #以指定其他函数
        super(MLP,self).__init__(**kwargs)
        self.hidden=nn.Linear(784,256)#隐藏层
        self.act=nn.ReLU()
        self.output=nn.Linear(256,10)#输出层
# 定义模型的前向计算,即如何根据输⼊x计算返回所需要的模型输出
    def forward(self,x):
        a=self.act(self.hidden(x))
        return self.output(a)
    

以上的 MLP 类中⽆须定义反向传播函数。系统将通过⾃动求梯度⽽⾃动⽣成反向传播所需的
backward 函数。

我们可以实例化 MLP 类得到模型变量 net 。下⾯的代码初始化 net 并传⼊输⼊数据 X 做⼀次前向计
算。其中, net(X) 会调⽤ MLP 继承⾃ Module 类的 call 函数,这个函数将调⽤ MLP 类定义的
forward 函数来完成前向计算。在这里插入图片描述

MODULE的子类

事实上,PyTorch还实现了继承⾃ Module 的可以⽅便
构建模型的类: 如 Sequential 、 ModuleList 和 ModuleDict 等等

Sequential类

当模型的前向计算为简单串联各个层的计算时, Sequential 类可以通过更加简单的⽅式定义模型。这
正是 Sequential 类的⽬的:它可以接收⼀个⼦模块的有序字典(OrderedDict)或者⼀系列⼦模块作为参数来逐⼀添加 Module 的实例,⽽模型的前向计算就是将这些实例按添加的顺序逐⼀计算。
下⾯我们实现⼀个与 Sequential 类有相同功能的 MySequential 类。在这里插入图片描述
在这里插入图片描述

模型参数的访问,初始化和共享

我们通过 init 模块来初始化模型的参数。我们也介绍了访问模型参数的简单⽅法。本节将深⼊讲解如何访问和初始化模型参数,以及如何在多个层之间共享同⼀份模型参数。

import torch
from torch import nn
from torch.nn import init
net = nn.Sequential(nn.Linear(4, 3), nn.ReLU(), nn.Linear(3, 1)) #
pytorch已进⾏默认初始化
print(net)
X = torch.rand(2, 4)
Y = net(X).sum()

在这里插入图片描述

访问模型参数

print(type(net.named_parameters()))
for name, param in net.named_parameters():
   print(name, param.size())

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

初始化模型参数

在这里插入图片描述
在这里插入图片描述

读取和存储

到⽬前为⽌,我们介绍了如何处理数据以及如何构建、训练和测试深度学习模型。然⽽在实际中,我们
有时需要把训练好的模型部署到很多不同的设备。在这种情况下,我们可以把内存中训练好的模型参数存储在硬盘上供后续读取使⽤。

读写 TENSOR

我们可以直接使⽤ save 函数和 load 函数分别存储和读取 Tensor 。 save 使⽤Python的pickle实⽤程序将对象进⾏序列化,然后将序列化的对象保存到disk,使⽤ save 可以保存各种对象,包括模型、张量和字典等。⽽ laod 使⽤pickle unpickle⼯具将pickle的对象⽂件反序列化为内存。

下⾯的例⼦创建了 Tensor 变量 x ,并将其存在⽂件名同为 x.pt 的⽂件⾥。

import torch
from torch import nn
x=torch.ones(3)
torch.save(x,'x.pt')

#然后将数据从存储的文件读回内存
x2=torch.load('x.pt')

在这里插入图片描述
我们还可以存储⼀个 Tensor 列表并读回内存。

y=torch.zeros(4)
torch.save([x,y],'xy.pt')
xy_list=torch.load('xy.pt')
xy_list

在这里插入图片描述

读写 模型

在 PyTorch 中 , Module 的 可 学 习 参 数 ( 即权᯿和偏差 ) ,模块模型包含在参数中 ( 通 过
model.parameters() 访问)。 state_dict 是⼀个从参数名称隐射到参数 Tesnor 的字典对象。
在这里插入图片描述
在这里插入图片描述
保存和加载模型
PyTorch中保存和加载训练模型有两种常⻅的⽅法:

  1. 仅保存和加载模型参数( state_dict );
  2. 保存和加载整个模型。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

GPU计算

到⽬前为⽌,我们⼀直在使⽤CPU计算。对复杂的神经⽹络和⼤规模的数据来说,使⽤CPU来计算可能
不够⾼效。在本节中,我们将介绍如何使⽤单块NVIDIA GPU来计算。所以需要确保已经安装好了
PyTorch GPU版本。准备⼯作都完成后,下⾯就可以通过 nvidia-smi 命令来查看显卡信息了。
在这里插入图片描述
PyTorch可以指定⽤来存储和计算的设备,如使⽤内存的CPU或者使⽤显存的GPU。默认情况下,
PyTorch会将数据创建在内存,然后利⽤CPU来计算。

#查看GPU是否可用
import torch 
from torch import nn
torch.cuda.available()
#查看数量
torch.cuda.device_count()
#查看名字
torch.cuda.get_device_name(0)

device=torch.device('cuda' if torch.cuda.is_available() else 'cpu')
x=torch.tensor([1,2,3],device=device)
#或着 
x=torch.tensor([1,2,3]).to(device)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二维卷积层

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

填充和步幅

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

卷积神经网络

在这里插入图片描述

LENET模型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

深度卷积神经⽹络(ALEXNET)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

VGG网络

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
参考文献:[
动手学深度学习(李沐)的pytorch版本(包含代码和pdf链接:https://pan.baidu.com/s/17uEh4x_GbO0F67bzgQkhuQ
提取码:cgbq

相关推荐

  1. 文件的输入与输出()

    2024-03-26 20:24:02       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-26 20:24:02       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-26 20:24:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-26 20:24:02       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-26 20:24:02       20 阅读

热门阅读

  1. 第三章-RocketMQ源码解析-基础模块

    2024-03-26 20:24:02       17 阅读
  2. 【阅读笔记】《西游记》

    2024-03-26 20:24:02       16 阅读
  3. LeetCode第四天(448. 找到所有数组中消失的数字)

    2024-03-26 20:24:02       16 阅读
  4. Python+Pytest+Allure搭建接口自动化测试框架

    2024-03-26 20:24:02       20 阅读
  5. 【C++】特殊类的设计

    2024-03-26 20:24:02       21 阅读
  6. Linux系统定时备份mysql数据库

    2024-03-26 20:24:02       20 阅读
  7. AtCoder Regular Contest 140 C - ABS Permutation (LIS ver.)

    2024-03-26 20:24:02       16 阅读
  8. 【C语言】指针基础知识(三)

    2024-03-26 20:24:02       16 阅读