龙凤网站建设云聚达长春网站建设哪里好
news/
2025/9/26 12:45:45/
文章来源:
龙凤网站建设云聚达,长春网站建设哪里好,建站公司 源码申请,单页的网站怎么做基于飞桨paddle波士顿房价预测练习模型测试代码 导入基础库
#paddle#xff1a;飞桨的主库#xff0c;paddle 根目录下保留了常用API的别名#xff0c;当前包括#xff1a;paddle.tensor、paddle.framework、paddle.device目录下的所有API#xff1b;
import paddle
#Lin…基于飞桨paddle波士顿房价预测练习模型测试代码 导入基础库
#paddle飞桨的主库paddle 根目录下保留了常用API的别名当前包括paddle.tensor、paddle.framework、paddle.device目录下的所有API
import paddle
#Linear神经网络的全连接层函数包含所有输入权重相加的基本神经元结构。在房价预测任务中使用只有一层的神经网络全连接层实现线性回归模型。
from paddle.nn import Linear
#paddle.nn组网相关的API包括 Linear、卷积 Conv2D、循环神经网络LSTM、损失函数CrossEntropyLoss、激活函数ReLU等
#paddle.nn.functional与paddle.nn一样包含组网相关的API如Linear、激活函数ReLU等二者包含的同名模块功能相同运行性能也基本一致。
#差别在于paddle.nn目录下的模块均是类每个类自带模块参数paddle.nn.functional目录下的模块均是函数需要手动传入函数计算所需要的参数。
#在实际使用时卷积、全连接层等本身具有可学习的参数建议使用paddle.nn而激活函数、池化等操作没有可学习参数可以考虑使用paddle.nn.functional。
import paddle.nn.functional as F
#NumPyNumerical Python的简称是高性能科学计算和数据分析的基础包
import numpy as np
#os 操作系统库
import os
#random 椭机数库
import random#数据处理
#数据处理
#
def load_data():# 从文件导入数据datafile housing.datadata np.fromfile(datafile, sep , dtypenp.float32)# 每条数据包括14项其中前面13项是影响因素第14项是相应的房屋价格中位数feature_names [ CRIM, ZN, INDUS, CHAS, NOX, RM, AGE, \DIS, RAD, TAX, PTRATIO, B, LSTAT, MEDV ]feature_num len(feature_names)# 将原始数据进行Reshape变成[N, 14]这样的形状data data.reshape([data.shape[0] // feature_num, feature_num])# 将原数据集拆分成训练集和测试集# 这里使用80%的数据做训练20%的数据做测试# 测试集和训练集必须是没有交集的ratio 0.8offset int(data.shape[0] * ratio) #404*0.8323offsettraining_data data[:offset] #获取-训练集# 计算train数据集的最大值最小值maximums, minimums training_data.max(axis0), training_data.min(axis0)# 记录数据的归一化参数在预测时对数据做归一化global max_valuesglobal min_valuesmax_values maximumsmin_values minimums# 对数据进行归一化处理for i in range(feature_num):data[:, i] (data[:, i] - min_values[i]) / (maximums[i] - minimums[i])# 训练集和测试集的划分比例training_data data[:offset]test_data data[offset:]return training_data, test_data
#
# 验证数据集读取程序的正确性
training_data, test_data load_data()
print(training_data.shape) #(404, 14)
print(training_data[1,:])
#模型设计
#模型设计
#
class Regressor(paddle.nn.Layer):# self代表类的实例自身def __init__(self):# 初始化父类中的一些参数super(Regressor, self).__init__()# 定义一层全连接层输入维度是13输出维度是1self.fc Linear(in_features13, out_features1)# 网络的前向计算def forward(self, inputs):x self.fc(inputs)return x
# #训练配置
#训练配置
# 声明定义好的线性回归模型
model Regressor()
# 开启模型训练模式
model.train()
# 加载数据
training_data, test_data load_data()
# 定义优化算法使用随机梯度下降SGD
# 学习率设置为0.01
opt paddle.optimizer.SGD(learning_rate0.01, parametersmodel.parameters())
#模型实例有两种状态训练状态.train()和预测状态.eval()。
# 训练时要执行正向计算和反向传播梯度两个过程而预测时只需要执行正向计算
# 为模型指定运行状态 **# 训练过程**
#训练过程采用二层循环嵌套方式
#内层循环 负责整个数据集的一次遍历采用分批次方式batch。
#外层循环 定义遍历数据集的次数通过参数EPOCH_NUM设置。
#
EPOCH_NUM 10 # 设置外层循环次数
BATCH_SIZE 10 # 设置batch大小# 定义外层循环
for epoch_id in range(EPOCH_NUM):# 在每轮迭代开始之前将训练数据的顺序随机的打乱np.random.shuffle(training_data)# 将训练数据进行拆分每个batch包含10条数据mini_batches [training_data[k:kBATCH_SIZE] for k in range(0, len(training_data), BATCH_SIZE)]# 定义内层循环for iter_id, mini_batch in enumerate(mini_batches):x np.array(mini_batch[:, :-1]) # 获得当前批次训练数据y np.array(mini_batch[:, -1:]) # 获得当前批次训练标签真实房价# 将numpy数据转为飞桨动态图tensor的格式house_features paddle.to_tensor(x)prices paddle.to_tensor(y)# 前向计算predicts model(house_features)# 计算损失loss F.square_error_cost(predicts, labelprices)avg_loss paddle.mean(loss)if iter_id%200:print(epoch: {}, iter: {}, loss is: {}.format(epoch_id, iter_id, avg_loss.numpy()))# 反向传播计算每层参数的梯度值avg_loss.backward()# 更新参数根据设置好的学习率迭代一步opt.step()# 清空梯度变量以备下一轮计算opt.clear_grad()
# # 保存并测试模型 # 保存模型
# 保存模型
# 使用paddle.save API将模型当前的参数数据 model.state_dict() 保存到文件中
# 用于模型预测或校验的程序调用。
# 保存模型参数文件名为LR_model.pdparams
paddle.save(model.state_dict(), LR_model.pdparams)
print(模型保存成功模型参数保存在LR_model.pdparams中) #测试模型
#测试模型
#
def load_one_example():# 从上边已加载的测试集中随机选择一条作为测试数据idx np.random.randint(0, test_data.shape[0])idx -10one_data, label test_data[idx, :-1], test_data[idx, -1]# 修改该条数据shape为[1,13]one_data one_data.reshape([1,-1])return one_data, label
#
# 参数为保存模型参数的文件地址
model_dict paddle.load(LR_model.pdparams)
model.load_dict(model_dict)
model.eval()# 参数为数据集的文件地址
one_data, label load_one_example()
# 将数据转为动态图的variable格式
one_data paddle.to_tensor(one_data)
predict model(one_data)# 对结果做反归一化处理
predict predict * (max_values[-1] - min_values[-1]) min_values[-1]
# 对label数据做反归一化处理
label label * (max_values[-1] - min_values[-1]) min_values[-1]print(预测结果Inference result is {}, 原相应值the corresponding label is {}.format(predict.numpy(), label))
# 执行结果如下所示
PS E:\project\python D:/Python39/python.exe e:/project/python/BSD_House.py
(404, 14)
[2.35922547e-04 0.00000000e00 2.62405723e-01 0.00000000e001.72839552e-01 5.47997713e-01 7.82698274e-01 3.48961979e-014.34782617e-02 1.14822544e-01 5.53191364e-01 1.00000000e002.04470202e-01 3.68888885e-01]
epoch: 0, iter: 0, loss is: [1.0095187]
epoch: 0, iter: 20, loss is: [0.05577583]
epoch: 0, iter: 40, loss is: [0.10179052]
epoch: 1, iter: 0, loss is: [0.05334579]
epoch: 1, iter: 20, loss is: [0.05690664]
epoch: 1, iter: 40, loss is: [0.00672564]
epoch: 2, iter: 0, loss is: [0.07125398]
epoch: 2, iter: 20, loss is: [0.07457525]
epoch: 2, iter: 40, loss is: [0.06540678]
epoch: 3, iter: 0, loss is: [0.06383592]
epoch: 8, iter: 40, loss is: [0.02903528]
epoch: 9, iter: 0, loss is: [0.05061438]
epoch: 9, iter: 20, loss is: [0.03942648]
epoch: 9, iter: 40, loss is: [0.02119895]
模型保存成功模型参数保存在LR_model.pdparams中
预测结果Inference result is [[18.37352]], 原相应值the corresponding label is 19.700000762939453
PS E:\project\python模型保存成功模型参数保存在LR_model.pdparams中 预测结果 预测结果Inference result is [[18.37352]], 原相应值the corresponding label is 19.700000762939453
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/918257.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!