深度学习23:PyTorch:搭建神经网络测试(查看参数,模型结构和device设置)

目录标题

一、自定义模型

在神经网络框架中,由多个层组成的组件称之为 模块(Module)。

在 PyTorch 中模型就是一个 Module,各网络层、模块也是 Module。Module 是所有神经网络的基类。

在定义一个 Module 时,我们需要继承 torch.nn.Module 并主要实现两个方法:

__init__:定义网络各层的结构,并初始化参数。

forward:根据输入进行前向传播,并返回输出。计算其输出关于输入的梯度,可通过其反向传播函数进行访问(通常自动发生)。forward 方法是每次调用的具体实现。

接下来使用 PyTorch 实现下图的神经网络:

第 1 个隐藏层:使用 Xavier 正态分布初始化权重,激活函数使用 Tanh。

第 2 个隐藏层:使用 He 正态分布初始化权重,激活函数使用 ReLU。

输出层:按默认方式初始化,激活函数使用 Softmax。

二、代码

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

#自定义神经网络类
class Model(nn.Module):
    #初始化
    def __init__(self):
        super().__init__()
        #定义三个线性层
        self.linear1 = nn.Linear(3,4)
        nn.init.xavier_normal_(self.linear1.weight)
        self.linear2 = nn.Linear(4,4)
        nn.init.kaiming_normal_(self.linear2.weight)
        self.out = nn.Linear(4,2)
    #前向传播
    def forward(self,x):
        x = self.linear1(x)
        x = torch.tanh(x)
        
        x = self.linear2(x)
        x = torch.relu(x)
        
        x = self.out(x)
        x = torch.softmax(x,dim=1)
        return x
    
#测试
# 1.定义输入数据
x = torch.randn(10,3)

# 2. 创建神经网络
model = Model()

# 3.前向传播
output = model(x)

print(f'神经网络输出为:{output}')

三、查看参数

方式一
python 复制代码
#查看参数 (逐个查看)
print(model.linear1.weight)
print(model.linear1.bias)
print(model.linear1.weight)
print(model.linear1.bias)
print(model.out.weight)
print(model.out.bias)
方式二
python 复制代码
#调用parameters,直接查看所有参数(输出看不到这些参数对应那些W ,b 等)
for param in model.parameters():
    print(param)
方式三
python 复制代码
#调用parameters,直接查看所有参数
for name,param in model.named_parameters():
    print(name,param)
方式四
python 复制代码
#调用state_dict,得到所有参数的字典表示
print(model.state_dict())

四、查看模型结构和参数数量

可使用 torchsummary.summary 来查看模型结构与参数数量。需要先安装 torchsummary 库:pip install torchsummary。

python 复制代码
 from torchsummary import summary
summary(model,input_size=(3,),batch_size=10,device='cpu')


第一个线性层w 3 * 4    param 里面算了 b 12(3*4) + 4 = 16
第二个线性层w 4 * 4    param 里面算了 b 16(4*4) + 4 = 20
第三个线性层w 4 * 2    param 里面算了 b 8(2*4) + 2 = 10


----------------------------------------------------------------
        Layer (type)               Output Shape         Param #
================================================================
            Linear-1                    [10, 4]              16
            Linear-2                    [10, 4]              20
            Linear-3                    [10, 2]              10
================================================================
Total params: 46
Trainable params: 46
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.00
Forward/backward pass size (MB): 0.00
Params size (MB): 0.00
Estimated Total Size (MB): 0.00
----------------------------------------------------------------

五、device

python 复制代码
input = torch.randn(1,5)
print(input.device)

cpu


input = torch.randn(1,5,device='cuda')
print(input.device)
#我台式没有显卡,报错
AssertionError: Torch not compiled with CUDA enabled

#定义完再修改设备
input.to(device='cuda')


#设置全局变量
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
device = 'cuda' if torch.cuda.is_available() else 'cpu'
print(device)
相关推荐
武天旭10 小时前
AI安全--AI大模型的后门攻击检测与防御
人工智能·深度学习·安全·机器学习
qianbo_insist16 小时前
# 在 Qwen3.5-2B 上把 GDN-1 无损换成 GDN-2:一次完整的架构手术实验(负结果)
人工智能·pytorch·python·架构
xsd2024111817 小时前
智慧园区算法平台搭建详解:从模型仓到统一推理,多模型怎么管起来
人工智能·深度学习
labuladong17 小时前
机器学习&神经网络 系列教程上线
神经网络·算法·机器学习
Smoothcloud润云19 小时前
远程纳管GPU怎么安全升级?驱动、组件灰度与回滚实战
人工智能·深度学习·安全·gpu算力·gpu·数据库管理员
tellmewhoisi19 小时前
深度学习19:PyTorch:自动微分模块
人工智能·pytorch·深度学习
怎么全是重名20 小时前
CLIP-Learning Transferable Visual Models From Natural Language Supervision
人工智能·深度学习·计算机视觉·异常检测
米饭是菜qy20 小时前
动手学深度学习(李沐)——现代循环神经网络读书笔记
人工智能·rnn·深度学习