【PaddlePaddle】:一元线性回归与ONNX格式导出预测

一元线性回归与ONNX格式导出预测

PaddlePaddle提供了在线训练平台,避免了一系列环境的依赖,非常Nice,并且语法与pytorch类似,减少了学习成本。

本文记录PaddlePaddle中简单的一元线性回归案例与ONNX格式导出,后续部署在嵌入式平台。

在线平台:AI Studio 地址

1.生成数据集

import numpy as np
import matplotlib.pyplot as plt
import paddle
from paddle.io import Dataset

number = 5000
x = np.linspace(-100,100,number)

y = 2*x+1+np.random.normal(-10,10,size=number)

plt.scatter(x,y)
plt.xlabel("x number")
plt.ylabel("y real number")
plt.title("x & y scatter graph")
plt.show()

在这里插入图片描述

2.完善数据集与模型

class Dataset(paddle.io.Dataset):
    # 重写数据集初始化函数
    def __init__(self, smaples_num):
        super(Dataset, self).__init__()
        self.smaples_num = smaples_num
    
    # 重写生成样本的函数
    def __getitem__(self, index):
        data = paddle.to_tensor(x[index])
        label = paddle.to_tensor(y[index])

        return data, label

    # 重写返回数据集大小的函数
    def __len__(self):
        return self.smaples_num

dataset = Dataset(number)

class MyNet(paddle.nn.Layer):
    def __init__(self):
        super(MyNet,self).__init__()
        self.dense1 = paddle.nn.Linear(1,100)
        self.dense2 = paddle.nn.Linear(100,1,None)

    def forward(self,x):
        x=self.dense1(x)
        x=self.dense2(x)

        return x

mynet = MyNet()


3.模型训练

这里使用了PaddlePaddle的高级API实现

from paddle.metric import Accuracy
model = paddle.Model(mynet)   # 用Model封装模型
optim = paddle.optimizer.Adam(learning_rate=0.0001, parameters=model.parameters())

# 配置模型
model.prepare(optim, paddle.nn.MSELoss())
model.fit(dataset, epochs=100, batch_size=100)

4.模型预测

x = np.linspace(300,400,100)
x_tensor = paddle.to_tensor(x,dtype='float32')

y_predict = model.predict(x_tensor)

y = []

for i in range(100):
    y.append(y_predict[0][i][0])

plt.plot(x,y)
plt.show()

在这里插入图片描述
我们也可以使用单独的数字来预测。

data = 400
x_tensor =  paddle.to_tensor(data,dtype='float32')
y_predict = model.predict(x_tensor)
print(y_predict)

在这里插入图片描述

5.ONNX导出

我这边模型输入就是一维的,所以是[1],并且为float32,x代表输入的名称,后面在onnx预测时会使用。

save_path = 'onnx.save/mynet' # 需要保存的路径
x_spec = paddle.static.InputSpec([1], 'float32', 'x') # 为模型指定输入的形状和数据类型,支持持 Tensor 或 InputSpec ,InputSpec 支持动态的 shape。
paddle.onnx.export(mynet, save_path, input_spec=[x_spec], opset_version=11)

6.ONNX预测

注意这里需要安装ONNX包
在这里插入图片描述
打开终端安装即可

pip install onnxruntime

预测代码如下:

import onnxruntime
session = onnxruntime.InferenceSession("/home/aistudio/onnx.save/mynet.onnx")

# 获取模型输入信息
inputs = session.get_inputs()

# 打印模型输入信息
for inp in inputs:
    print("Input Name:", inp.name)
    print("Input Shape:", inp.shape)
    print("Input Type:", inp.type)

# 定义整数输入
x = 900.0

# 将输入转换为浮点数类型
input_data = np.array([float(x)], dtype=np.float32)
print(input_data)

# 将数据传递给模型进行推理
output = session.run(None, {"x": input_data})

print(output)

在这里插入图片描述
结果吻合,我们这个就是y=2x+1。

项目地址:https://aistudio.baidu.com/aistudio/projectdetail/6127734?contributionType=1

后续将部署在全志平台,继续研究。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值