使用paddle动态图搭建网络(入门)

前言

记录下如何用paddle2.0搭建一个网络,在动态图模式下用容易上手的高层api复现多种网络


使用paddle2.0动态图搭建网络(超简易)

环境

Aistudio项目 Notebook线上环境
paddle版本 : 2.0
使用动态图模式(默认)

参考

多层感知机模型
卷积网络
学习目录
•以上均来自课程: https://aistudio.baidu.com/aistudio/course/introduce/11939?directly=1&shared=1

编写模型

①感知机模型

上代码,多层感知机模型构建的网络如下:

首先定义模型,在__init__里写层,在forward方法里写过程。但是前者与后者之间没有顺序可言,后者是网络的前向传播过程。然后用paddle.model进行模型的封装,model.prepare进行模型配置,model.fit进行模型训练。只要知道自己要做的是什么,之后比葫芦画瓢就行。

PS:在定义网络时要继承paddle.nn.Layer。然后具体网络实现的各种API可以在官方文档下查阅

# 定义感知机
"""
逻辑:①拍扁为28 x 28 = 784的features。
	 ②加一层隐藏层,设隐藏层单元数量为128个。
	 ③用激活函数σ\sigmaσ进行非线性转化,即relu一下
	 ④把经过隐藏层激活的输出值进行线性加权,从128维线性转化为10维,得到输出层
"""
class MLPModel(paddle.nn.Layer):
    def __init__(self):
        super(MLPModel, self).__init__()
        self.flatten=paddle.nn.Flatten()
        self.hidden=paddle.nn.Linear(in_features=784,out_features=128)
        self.output=paddle.nn.Linear(in_features=128,out_features=10)
        
    def forward(self, x):
        x=self.flatten(x)
        x=self.hidden(x) #经过隐藏层
        x=F.relu(x) #经过激活层
        x=self.output(x)
        return x
 
#封装模型
model=paddle.Model(MLPModel())
#配置模型
model.prepare(paddle.optimizer.Adam(parameters=model.parameters()),
              paddle.nn.CrossEntropyLoss(),
              paddle.metric.Accuracy())
#训练模型
model.fit(train_dataset,
          epochs=5,
          batch_size=64,
          verbose=1)

经过5轮epoch训练,分类准确率达到0.9827。测试集上的分类准确率达到0.9742.。
在这里插入图片描述

							官方文档一览
②卷积神经网络
“”“
逻辑:①定义第一层卷积
	 ②在卷积之后加上激活函数,然后池化提取最大化特征
	 ③重复过程,等到特征足够少时,flatten拍平
	 ④再用多层线性层,线性层后面记得跟relu激活函数
	 ⑤总结:卷积神经网络与前者相比能减少参数
”“”
#定义模型
class LeNetModel(paddle.nn.Layer):
    def __init__(self):
        super(LeNetModel, self).__init__()
        # 创建卷积和池化层块,每个卷积层后面接着2x2的池化层
        #卷积层L1
        self.conv1 = paddle.nn.Conv2D(in_channels=1,
                                      out_channels=6,
                                      kernel_size=5,
                                      stride=1)
        #池化层L2
        self.pool1 = paddle.nn.MaxPool2D(kernel_size=2,
                                         stride=2)
        #卷积层L3
        self.conv2 = paddle.nn.Conv2D(in_channels=6,
                                      out_channels=16,
                                      kernel_size=5,
                                      stride=1)
        #池化层L4
        self.pool2 = paddle.nn.MaxPool2D(kernel_size=2,
                                         stride=2)
        #线性层L5
        self.fc1=paddle.nn.Linear(256,120)
        #线性层L6
        self.fc2=paddle.nn.Linear(120,84)
        #线性层L7
        self.fc3=paddle.nn.Linear(84,10)

    #正向传播过程
    def forward(self, x):
        x = self.conv1(x)
        x = F.relu(x)
        x = self.pool1(x)
        x = F.relu(x)
        x = self.conv2(x)
        x = self.pool2(x)
        x = paddle.flatten(x, start_axis=1,stop_axis=-1)
        x = self.fc1(x)
        x = F.relu(x)
        x = self.fc2(x)
        x = F.relu(x)
        out = self.fc3(x)
        return out

经过5个epoch世代迭代,LeNet5模型在CIFAR10图像分类任务上的准确度仅在60.25%左右。

总结&对比

通过高层api直观感受到网络结构。
本例中:感知机模型参数多,网络结构不够灵活,但在某些分类任务上acc高;卷积神经网络参数较前者少,但是在某些分类任务上表现一般。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是在PyCharm中搭建PaddlePaddle神经网络模型的步骤: 1. 安装PaddlePaddle 首先需要安装PaddlePaddle,可以通过pip命令进行安装。在PyCharm的Terminal中输入以下命令即可: ``` pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple ``` 2. 创建PyCharm项目 打开PyCharm,创建一个新项目。选择Python解释器为刚刚安装的PaddlePaddle使用Python解释器。 3. 导入PaddlePaddle 在PyCharm的代码编辑区域中,导入PaddlePaddle库: ```python import paddle ``` 4. 构建神经网络模型 在PyCharm的代码编辑区域中,构建神经网络模型。可以使用PaddlePaddle的API来构建模型。 ```python import paddle.nn.functional as F class MyModel(paddle.nn.Layer): def __init__(self): super(MyModel, self).__init__() self.fc1 = paddle.nn.Linear(784, 512) self.fc2 = paddle.nn.Linear(512, 10) def forward(self, x): x = F.relu(self.fc1(x)) x = self.fc2(x) return x ``` 在这个例子中,我们创建了一个名为MyModel的类,继承自paddle.nn.Layer。该类包含两个线性层(fc1和fc2),以及一个前向方法(forward)。 5. 训练模型 在PyCharm的代码编辑区域中,训练神经网络模型。可以使用PaddlePaddle的API来训练模型。 ```python model = MyModel() # 定义损失函数和优化器 loss_fn = paddle.nn.CrossEntropyLoss() optimizer = paddle.optimizer.Adam(parameters=model.parameters()) # 进行训练 for epoch in range(10): for batch_id, data in enumerate(train_loader()): x_data = data[0] y_data = data[1] logits = model(x_data) loss = loss_fn(logits, y_data) loss.backward() optimizer.step() optimizer.clear_grad() if batch_id % 100 == 0: print("epoch: {}, batch_id: {}, loss is: {}".format(epoch, batch_id, loss.numpy())) ``` 在这个例子中,我们首先创建了一个MyModel的实例,然后定义了损失函数和优化器。接着,我们进行了10个epoch的训练。在每个epoch中,我们遍历了训练集中的所有batch,并使用反向传播算法更新模型参数。 6. 预测 在PyCharm的代码编辑区域中,使用神经网络模型进行预测。可以使用PaddlePaddle的API来进行预测。 ```python # 进行预测 model.eval() accs = [] for batch_id, data in enumerate(val_loader()): x_data = data[0] y_data = data[1] logits = model(x_data) pred = paddle.argmax(logits, axis=-1) acc = paddle.metric.accuracy(pred, y_data) accs.append(acc.numpy()) print("accuracy is: {}".format(np.mean(accs))) ``` 在这个例子中,我们使用了验证集进行了预测,并计算了模型的准确率。 以上就是在PyCharm中搭建PaddlePaddle神经网络模型的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值