首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >paddle深度学习9 搭建模型nn.Layer

paddle深度学习9 搭建模型nn.Layer

原创
作者头像
用户11104668
发布于 2025-01-15 05:43:07
发布于 2025-01-15 05:43:07
1550
举报
文章被收录于专栏:paddle深度学习paddle深度学习

在 Paddle 中,模型搭建的核心是组合各种 Layer(层)来构建神经网络。Paddle 提供了丰富的内置 Layer,同时也支持自定义 Layer 的实现。本节将介绍如何使用 Paddle 内置的 Layer 搭建模型。

paddle.nn.Layer是 PaddlePaddle 中用于构建神经网络模型的基础类,它对标于pytorch中的torch.nn.Module

【常见的Layer层】

Paddle 提供了大量的内置 Layer,涵盖了深度学习中的常见操作,例如:

线性层: paddle.nn.Linear

卷积层: paddle.nn.Conv2D, paddle.nn.Conv3D

池化层: paddle.nn.MaxPool2D, paddle.nn.AvgPool2D

激活函数层: paddle.nn.ReLU, paddle.nn.Sigmoid, paddle.nn.Tanh

归一化层: paddle.nn.BatchNorm2D, paddle.nn.LayerNorm

循环神经网络层: paddle.nn.LSTM, paddle.nn.GRU

Dropout 层: paddle.nn.Dropout

【paddle.nn.Sequential】

对于简单的模型,可以使用 paddle.nn.Sequential 将多个 Layer 按顺序组合起来

# 定义一个简单的全连接神经网络

import paddle

model = paddle.nn.Sequential(

paddle.nn.Linear(784, 512), # 输入层到隐藏层

paddle.nn.ReLU(), # 激活函数ReLU

paddle.nn.Linear(512, 10) # 隐藏层到输出层

)

print(model)

【自定义模型】

如果内置的 Layer 无法满足需求,可以自定义 Layer。

尤其是大型的复杂模型,基本都要使用自定义模型来实现

自定义 Layer 也需要继承 paddle.nn.Layer 类,并实现 __init__ 和 forward 方法

import paddle

class MyModel(paddle.nn.Layer):

def __init__(self, input_dim=784, hidden_dim=512, output_dim=10):

super(MyModel, self).__init__()

# 定义第一层线性层

self.layer1 = paddle.nn.Linear(input_dim, hidden_dim)

# 使用ReLU激活函数

self.relu1 = paddle.nn.ReLU()

# 定义第二层线性层

self.layer2 = paddle.nn.Linear(hidden_dim, output_dim)

def forward(self, x):

x = self.layer1(x)

x = self.relu1(x)

x = self.layer2(x)

return x

model = MyModel()

print(model)

魔法方法__init__通常用来定义一些模型中用到的各层的模块和信息

forward函数则定义了一个张量进入模型的整个计算过程,及时拿到一个比较复杂的模型,只要看懂了forward,就看懂了模型的构建过程

在今后的学习复杂模型时,可以使用打印shape的方法进行学习和调试

import paddle

class MyModel(paddle.nn.Layer):

def __init__(self, input_dim=784, hidden_dim=512, output_dim=10):

super(MyModel, self).__init__()

# 定义第一层线性层

self.layer1 = paddle.nn.Linear(input_dim, hidden_dim)

# 使用ReLU激活函数

self.relu1 = paddle.nn.ReLU()

# 定义第二层线性层

self.layer2 = paddle.nn.Linear(hidden_dim, output_dim)

def forward(self, x):

print('输入维度:',x.shape)

x = self.layer1(x)

print('第一层过后:',x.shape)

x = self.relu1(x)

print('激活函数relu过后:',x.shape)

x = self.layer2(x)

print('第二层过后:',x.shape)

return x

model = MyModel()

# 假设输入是一个 batch_size=4 的样本,每个样本的维度是 784

input_data = paddle.randn([4, 784])

# 使用模型进行前向传播

output = model(input_data)

【模型保存】

训练好的模型可以保存下来,以便后续使用或部署。

paddle.save(model.state_dict(), 'model.pdparams')

本地将生成一个名为model.pdparams的文件,它保存着模型当前的权重信息

【加载模型】

# 加载模型参数

model = MyModel()

model_state_dict = paddle.load('model.pdparams')

model.set_state_dict(model_state_dict)

保存好的模型权重,在今后可以随时从文件中调出

例如,可以将训练好的模型权重保存,在下次开机使用或者迁移到其它的项目中

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档