paddle模型训练

1 使用高层API进行训练

import paddle

# 指定在 CPU 上训练
paddle.device.set_device('cpu')

# 指定在 GPU 第 0 号卡上训练
# paddle.device.set_device('gpu:0')

##模型的训练和推理

###方法1:使用高层API进行训练评估和推理

from paddle.vision.transforms import Normalize

transform = Normalize(mean=[127.5], std=[127.5], data_format='CHW')
# 加载 MNIST 训练集和测试集
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)
test_dataset = paddle.vision.datasets.MNIST(mode='test', transform=transform)

# 模型组网,构建并初始化一个模型 mnist
mnist = paddle.nn.Sequential(
    paddle.nn.Flatten(1, -1),
    paddle.nn.Linear(784, 512),
    paddle.nn.ReLU(),
    paddle.nn.Dropout(0.2),
    paddle.nn.Linear(512, 10)
)
print(type(mnist))
# 使用paddle.Model封装模型
model=paddle.Model(mnist)
# print(type(model))
# print(dir(model))

# 使用 Model.prepare 配置训练准备参数
# 为模型训练做准备,设置优化器及其学习率,并将网络的参数传入优化器,设置损失函数和精度计算方式
model.prepare(optimizer=paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters()),
              loss=paddle.nn.CrossEntropyLoss(),
              metrics=paddle.metric.Accuracy())
##使用 Model.fit 训练模型
model.fit(train_dataset,
          epochs=5,
          batch_size=64,
          verbose=1)

# 用 evaluate 在测试集上对模型进行验证
eval_result = model.evaluate(test_dataset, verbose=1)
print(eval_result)

2、基础API进行训练

import paddle

# 指定在 CPU 上训练
paddle.device.set_device('cpu')

from paddle.vision.transforms import Normalize

transform = Normalize(mean=[127.5], std=[127.5], data_format='CHW')
# 加载 MNIST 训练集和测试集
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)
test_dataset = paddle.vision.datasets.MNIST(mode='test', transform=transform)

mnist = paddle.nn.Sequential(
    paddle.nn.Flatten(1, -1),
    paddle.nn.Linear(784, 512),
    paddle.nn.ReLU(),
    paddle.nn.Dropout(0.2),
    paddle.nn.Linear(512, 10)
)

# dataset与mnist的定义与使用高层API的内容一致
# 用 DataLoader 实现数据加载
train_loader = paddle.io.DataLoader(train_dataset, batch_size=64, shuffle=True)

# 将mnist模型及其所有子层设置为训练模式。这只会影响某些模块,如Dropout和BatchNorm。
mnist.train()

# 设置迭代次数
epochs = 5

# 设置优化器
optim = paddle.optimizer.Adam(parameters=mnist.parameters())
# 设置损失函数
loss_fn = paddle.nn.CrossEntropyLoss()
for epoch in range(epochs):
    for batch_id, data in enumerate(train_loader()):

        x_data = data[0]  # 训练数据
        y_data = data[1]  # 训练数据标签
        predicts = mnist(x_data)  # 预测结果

        # 计算损失 等价于 prepare 中loss的设置
        loss = loss_fn(predicts, y_data)

        # 计算准确率 等价于 prepare 中metrics的设置
        acc = paddle.metric.accuracy(predicts, y_data)

        # 下面的反向传播、打印训练信息、更新参数、梯度清零都被封装到 Model.fit() 中
        # 反向传播
        loss.backward()

        if (batch_id + 1) % 900 == 0:
            print("epoch: {}, batch_id: {}, loss is: {}, acc is: {}".format(epoch, batch_id + 1, loss.numpy(),
                                                                            acc.numpy()))
        # 更新参数
        optim.step()
        # 梯度清零
        optim.clear_grad()

# 加载测试数据集
test_loader = paddle.io.DataLoader(test_dataset, batch_size=64, drop_last=True)
# 设置损失函数
loss_fn = paddle.nn.CrossEntropyLoss()
# 将该模型及其所有子层设置为预测模式。这只会影响某些模块,如Dropout和BatchNorm
mnist.eval()
# 禁用动态图梯度计算
for batch_id, data in enumerate(test_loader()):

    x_data = data[0]  # 测试数据
    y_data = data[1]  # 测试数据标签
    predicts = mnist(x_data)  # 预测结果

    # 计算损失与精度
    loss = loss_fn(predicts, y_data)
    acc = paddle.metric.accuracy(predicts, y_data)

    # 打印信息
    if (batch_id + 1) % 30 == 0:
        print("batch_id: {}, loss is: {}, acc is: {}".format(batch_id + 1, loss.numpy(), acc.numpy()))


# 加载测试数据集
test_loader = paddle.io.DataLoader(test_dataset, batch_size=64, drop_last=True)
# 将该模型及其所有子层设置为预测模式
mnist.eval()
for batch_id, data in enumerate(test_loader()):
    # 取出测试数据
    x_data = data[0]
    # 获取预测结果
    predicts = mnist(x_data)
print("predict finished")

# 从测试集中取出一组数据
img, label = test_loader().next()

# 执行推理并打印结果
pred_label = mnist(img)[0].argmax()
print('true label: {}, pred label: {}'.format(label[0].item(), pred_label[0].item()))
# 可视化图片
from matplotlib import pyplot as plt
plt.imshow(img[0][0])




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
训练Paddle模型需要通过Deep Learning Java (DLJava)工具包 (DJL) 来实现。DJL是一个开源的Java深度学习框架,在PaddlePaddle的基础上提供了Java API。下面是一个简单的步骤来训练Paddle模型使用DJL: 1. 安装DJL: 首先,需要在你的Java项目中引入DJL的依赖。可以通过在项目的构建文件中添加相关依赖来实现。 2. 加载训练数据: 使用DJL可以很容易地加载和处理你的训练数据。可以使用DJL的DataSet API来加载数据,然后可以对数据进行处理和转换。 3. 构建模型: 在DJL中,可以使用PaddlePaddle提供的模型构建块来构建你自己的模型。可以通过调用DJL的Model API来创建一个模型对象,并选择PaddlePaddle提供的各种模型架构。可以使用PaddlePaddle的预训练模型或者自己定义的模型。 4. 设置训练参数: 在模型训练之前,需要设置一些训练参数,例如学习率、优化器等。DJL提供了一些常用的优化器和损失函数供你选择。 5. 训练模型: 通过调用DJL的Trainer API来训练模型。可以指定训练的轮数、批次大小等参数。DJL会自动将数据切分为小批次进行训练,并进行反向传播和参数的更新。 6. 评估模型: 在训练完成后,可以使用测试数据来评估模型的性能。可以使用DJL提供的Evaluator API来进行评估,并计算模型的准确度或其他评价指标。 7. 保存和加载模型: 训练完成后,可以将模型保存为文件,以便以后使用。DJL提供了ModelZoo API来保存和加载模型。 总之,通过DJL工具包,您可以使用Java语言来训练Paddle模型。可以使用DJL提供的API来加载数据、构建模型、设置训练参数、训练模型、评估模型和保存模型。它提供了简化的接口和丰富的功能,使您能够轻松地进行Paddle模型训练和部署。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一壶浊酒..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值