Pytorch教程

【介绍】pytorch建模-模型构建

作者 : 老饼 发表日期 : 2023-07-28 10:48:49 更新日期 : 2024-03-17 03:21:44
本站原创文章,转载请说明来自《老饼讲解-深度学习》www.bbbdata.com






    01. pytorch模型的构建与使用    




本节展示如何在pytorch中构建一个神经网络模型




    pytorch的模型构建    


在pytorch中构建一个模型的形式如下:
from   torch import nn
import torch
from torch.nn import functional as F

# ------构建神经网络模型----------------                              
class BPModle(nn.Module):        
    def __init__(self):        
        super().__init__()         
        self.L1= nn.Linear(1, 5)      
        self.L2= nn.Linear(5, 1)     
    def forward(self, x):                                             
        y = self.L2(F.tanh(self.L1(x)))    
        return y  

#---------模型的使用-----------
model = BPModle()            # 实例化模型
x = torch.tensor([0.1])      # 需要预测的x
y = model(x)                 # 用模型进行预测
print(y)                     # 打印预测结果:0.5107
模型构建的整体代码解说
BPModle是我们定义的模型类名,它必须继承pytorch的nn.Module类
然后需要实现__init__和forward两个方法,它们的意义如下
1. __init__方法是模型的初始化部分,它代表模型初始化时执行的逻辑                                                         
2. forward方法是模型的前馈部分,它代表模型的计算逻辑,即传入x给模型时,模型是如何计算得到输出的
 代码中__init__部分的代码解说
在__init__里一般先初始化forward中所需要用到的模块,这里我们初始化了两个线性层模块L1和L2,
 nn.Linear是pytorch提供的全连接线性层模块,类似的还有卷积层、池化层等等常用的运算模型
 
代码中forward部分的代码解说
在 forward里我们定义模型的计算方式为self.L2(F.tanh(self.L1(x))),
也即传入一个x=0.1后,模型先经过L1的计算以及tanh函数的激活,再经过L2模块的运算,就得到模型的输出结果0.5107





    pytorch中关于前馈模型的构建    


由于在深度学习中,模型往往都是层层前馈的方式进行计算
所以,pytorch还提供了Sequential函数,方便我们将顺序前馈计算的模块组装在一起
具体示例如下
from   torch import nn
# ------构建神经网络模型----------------                              
class BPModle(nn.Module):                                             
    def __init__(self):                                               
        super().__init__()                                            
        self.nn = nn.Sequential(       
            nn.Linear(1, 5), 
            nn.Tanh(),    
            nn.Linear(5, 1)    
        )        
    def forward(self, x):   
        y = self.nn(x)                                                
        return y          
在这里我们在__init__中只定义了一个nn模块,它把nn.Linear(1, 5)、nn.Tanh()、nn.Linear(5, 1) 组装在一起,
在forward中调用self.nn模块时,self.nn就会顺序调用nn.Linear(1, 5)、nn.Tanh()、nn.Linear(5, 1) 三个模块进行计算







    02. pytorch模型的参数    




本节我们讲解如何查看pytorch中模型的参数,以及如何为模型定义一个模型参数




      pytorch模型的参数    


要查看模型的参数,可以在模型初始化后,通过state_dict函数来查看模型的参数,
具体示例如下:
from   torch import nn
from torch.nn import functional as F
# ------构建神经网络模型----------------                              
class BPModle(nn.Module):                                             
    def __init__(self):                                               
        super().__init__()                                            
        self.L1= nn.Linear(1, 5)                                          
        self.L2= nn.Linear(5, 1)               
    def forward(self, x):                                             
        y = self.L2(F.tanh(self.L1(x)))                                          
        return y                                                      
model = BPModle()
print(model.state_dict())
运行结果如下:
 
可以看到,模型中共包含了四个参数,L1的权重与阈值、L2的权重与阈值
在代码里我们没有看模型参数的定义,这是因为nn.Linear已经为我们定义好了weight和bias作为参数
而我们在BPModle里使用nn.Linear时,BPModle就会自动把nn.Linear的参数收集和管理起来
所以最终BPModle就包含了L1和L2的四个参数:L1.weight、L1.bias、L2.weight、L2.bias





      pytorch如何定义一个模型的参数    


如何我们要在pytorch的模型里定义一个模型的参数,则需要将变量定义为Parameter对象
只有Parameter对象才会被模型作为模型参数收集与管理起来
 具体示例如下:
from   torch import nn
import torch
from torch.nn import functional as F
# ------构建神经网络模型----------------                              
class BPModle(nn.Module):                                             
    def __init__(self):                                               
        super().__init__()                                            
        self.L1= nn.Linear(1, 5)                                          
        self.L2= nn.Linear(5, 1) 
        self.w = nn.Parameter(torch.randn(1,1))   # 定义模型参数w
    def forward(self, x):                                             
        y = self.L2(F.tanh(self.L1(x)))* self.w              
        return y                                                      
model = BPModle()
print(model.state_dict())
运行结果如下:
 

从运行结果中可以看到模型里已经添加了我们定义的模型参数w










 End 






联系老饼