【PyTorch】(三)模型的创建、参数初始化、保存和加载

文章目录

  • [1. 模型的创建](#1. 模型的创建)
    • [1.1. 模型组件](#1.1. 模型组件)
      • [1.1.1. 网络层](#1.1.1. 网络层)
      • [1.1.2. 激活函数](#1.1.2. 激活函数)
      • [1.1.3. 函数包](#1.1.3. 函数包)
      • [1.1.4. 容器](#1.1.4. 容器)
    • [1.2. 创建方法](#1.2. 创建方法)
      • [1.1.1. 通过使用模型组件](#1.1.1. 通过使用模型组件)
      • [1.1.2. 通过继承nn.Module类](#1.1.2. 通过继承nn.Module类)
    • [1.3. 将模型转移到GPU](#1.3. 将模型转移到GPU)
  • [2. 模型参数初始化](#2. 模型参数初始化)
  • [3. 模型的保存与加载](#3. 模型的保存与加载)
    • [3.1. 只保存参数](#3.1. 只保存参数)
    • [3.2. 保存模型和参数](#3.2. 保存模型和参数)

1. 模型的创建

1.1. 模型组件

1.1.1. 网络层

1.1.2. 激活函数

1.1.3. 函数包

1.1.4. 容器

1.2. 创建方法

1.1.1. 通过使用模型组件

可以直接使用模型组件快速创建模型。

python 复制代码
import torch.nn as nn

model =	nn.Linear(10, 10)
print(model)

输出结果:

bash 复制代码
Linear(in_features=10, out_features=10, bias=True)

1.1.2. 通过继承nn.Module类

在__init__方法中使用模型组件定义模型各层。必须重写forward方法实现前向传播。

python 复制代码
import torch.nn as nn

class Model(nn.Module):
    def __init__(self):
        super().__init__()
        self.layer1 = nn.Linear(10, 10)
        self.layer2 = nn.Linear(10, 10)
        self.layer3 = nn.Sequential(
            nn.Linear(10, 10),
            nn.ReLU(),
            nn.Linear(10, 10)
        )

    def forward(self, x):
        x = self.layer1(x)
        x = self.layer2(x)
        x = self.layer3(x)
        return x

model = Model()
print(model)

输出结果:

bash 复制代码
Model(
  (layer1): Linear(in_features=10, out_features=10, bias=True)
  (layer2): Linear(in_features=10, out_features=10, bias=True)
  (layer3): Sequential(
    (0): Linear(in_features=10, out_features=10, bias=True)
    (1): ReLU()
    (2): Linear(in_features=10, out_features=10, bias=True)
  )
)

1.3. 将模型转移到GPU

方法与将数据转移到GPU类似,都有两种方法:

  1. model.to(device)
  2. mode.cuda()
python 复制代码
import torch
import torch.nn as nn

# 创建模型实例
model = nn.Sequential(
    nn.Linear(10, 10),
    nn.ReLU(),
    nn.Linear(10, 10)
)

# 将模型移动到GPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)
# 也可以
model = model.cuda()

2. 模型参数初始化

torch.nn.init提供了许多初始化参数的函数:

函数名 作用 参数
uniform_ 从均匀分布 U ( a , b ) U(a,b) U(a,b)中生成值,填充输入的张量 tensor, a = 0, b = 1
normal_ 从正态分布 N ( m e a n , s t d 2 ) N(mean, std^2) N(mean,std2)中生成值,填充输入的张量 tensor, mean = 0, std = 1
constant_ 用常数 v a l val val,填充输入的张量 tensor, val
eye_ 用单位矩阵,填充二维输入张量 tensor(二维)
dirac_ 用狄拉克函数,填充{3, 4, 5}维输入张量 tensor({3, 4, 5}维), groups = 1
xavier_uniform_ 从xavier均匀分布中生成值,填充输入张量 tensor, gain = 1
xavier_normal_ 从xavier正态分布中生成值,填充输入张量 tensor, gain = 1
kaiming_uniform_ 从kaiming均匀分布中生成值,填充输入张量 tensor, a = 0, mode = 'fan_in', nonlinearity = 'leaky_relu'
kaiming_normal_ 从kaiming正态分布中生成值,填充输入张量 tensor, a = 0, mode = 'fan_in', nonlinearity = 'leaky_relu'
orthogonal_ 用一个(半)正交矩阵,填充输入张量 tensor, gain = 1
sparse_ 用非零元素服从 N ( 0 , s t d 2 ) N(0, std^2) N(0,std2)的稀疏矩阵,填充二维输入张量 tensor, sparsity, std = 0.01

3. 模型的保存与加载

模型保存和加载使用的python内置的pickle模块。

3.1. 只保存参数

python 复制代码
import torch
import torch.nn as nn

# 创建模型实例
model1 = nn.Sequential(
    nn.Linear(10, 10),
    nn.ReLU(),
    nn.Linear(10, 10)
)

# 保存和加载参数
torch.save(model1.state_dict(), '../model/model_params.pkl')
model1.load_state_dict(torch.load('../model/model_params.pkl'))

3.2. 保存模型和参数

python 复制代码
import torch
import torch.nn as nn

# 创建模型实例
model1 = nn.Sequential(
    nn.Linear(10, 10),
    nn.ReLU(),
    nn.Linear(10, 10)
)

# 保存和加载模型和参数
torch.save(model1, '../model/model.pt')
model2 = torch.load('../model/model.pt')
print(model2)
相关推荐
伊织code7 小时前
PyTorch API 6
pytorch·api·ddp
范男10 小时前
基于Pytochvideo训练自己的的视频分类模型
人工智能·pytorch·python·深度学习·计算机视觉·3d·视频
伊织code15 小时前
PyTorch API 7
pytorch·api·张量·稀疏
聚客AI17 小时前
深度拆解AI大模型从训练框架、推理优化到市场趋势与基础设施挑战
图像处理·人工智能·pytorch·深度学习·机器学习·自然语言处理·transformer
大力水手(Popeye)20 小时前
Pytorch——tensor
人工智能·pytorch·python
Caven771 天前
【pytorch】reshape的使用
pytorch·python
无规则ai1 天前
动手学深度学习(pytorch版):第四章节—多层感知机(5)权重衰减
人工智能·pytorch·python·深度学习
雷达学弱狗1 天前
backward怎么计算的是torch.tensor(2.0, requires_grad=True)变量的梯度
人工智能·pytorch·深度学习
抠头专注python环境配置2 天前
Pytorch GPU版本安装保姆级教程
pytorch·python·深度学习·conda
爱分享的飘哥2 天前
第七十章:告别“手写循环”噩梦!Trainer结构搭建:PyTorch Lightning让你“一键炼丹”!
人工智能·pytorch·分布式训练·lightning·accelerate·训练框架·trainer