系列文章往期回顾

飞桨深度学习零基础入门(序)——Python实现梯度下降

使用飞桨(Paddle)构建单层神经网络

  • 系列文章往期回顾
  • 一、导入相关依赖包
  • 二、构建单层神经网络回归类
  • 三、设置参数
  • 四、导入数据集
  • 五、数据归一化
  • 六、训练并保存模型
  • 七、模型测试
  • 代码下载
  • keras相关版本的全连接层

一、导入相关依赖包

import paddle
from paddle.nn import Linear
import paddle.nn.functional as F
import numpy as np
import os
import random

其中:
Linear全连接层,在本文中仅采用一个全连接层即单个神经网络对波士顿房价进行预测

二、构建单层神经网络回归类

class Regressor(paddle.nn.Layer):def __init__(self):super(Regressor, self).__init__()self.fc = Linear(in_features=13, out_features=1)def forward(self, inputs):x = self.fc(inputs)return x

输入的特征是13个,对于结果仅输出对房价的预测

三、设置参数

model = Regressor()
model.train()
opt = paddle.optimizer.SGD(learning_rate=0.01, parameters=model.parameters())

将单层神经网络回归类实例化之后开启模型训练模式(model.train),设置优化器为随机梯度下降(SGD),并设置学习率为0.01,梯度下载的参数设置为模型所需的参数

四、导入数据集

由于个人很好奇数据集导入的格式,所以采用了keras.datasets来导入了数据集,常规的导入情况请参照上一篇文章

from keras.datasets import boston_housing
(training_data, train_targets), (test_data, test_targets) = boston_housing.load_data()
train_targets = train_targets.reshape((-1, 1))
training_data = np.array(np.concatenate([training_data, train_targets], axis=1).astype(np.double))
test_targets = test_targets.reshape((-1, 1))
test_data = np.array(np.concatenate([test_data, test_targets], axis=1).astype(np.double))

五、数据归一化

maxinums, mininums, avg = training_data.max(axis=0), training_data.min(axis=0), training_data.sum(axis=0) / training_data.shape[0]training_data, test_data = (training_data - mininums) / (maxinums - mininums), (test_data - mininums) / (maxinums - mininums)

六、训练并保存模型

EPOCH_NUM = 100   # 设置外层循环次数
BATCH_SIZE = 10  # 设置batch大小
for epoch_id in range(EPOCH_NUM):# 在每轮迭代开始之前,将训练数据的顺序随机的打乱# 将训练数据进行拆分,每个batch包含10条数据np.random.shuffle(training_data)mini_batches = [training_data[k:k+BATCH_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)house_features = paddle.cast(house_features, dtype="float32")prices = paddle.to_tensor(y)prices = paddle.cast(prices, dtype="float32")# 前向计算predicts = model(house_features)# 计算损失loss = F.square_error_cost(predicts, label=prices)avg_loss = paddle.mean(loss)if iter_id % 20==0:print("epoch: {}, iter: {}, loss is: {}".format(epoch_id, iter_id, avg_loss.numpy()))# 反向传播avg_loss.backward()# 最小化loss,更新参数opt.step()# 清除梯度opt.clear_grad()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, labelmodel_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)
one_data = paddle.cast(one_data, dtype='float32')
predict = model(one_data)# 对结果做反归一化处理
predict = predict * (maxinums[-1] - mininums[-1]) + avg[-1]
# 对label数据做反归一化处理
label = label * (maxinums[-1] - mininums[-1]) + avg[-1]print("Inference result is {}, the corresponding label is {}".format(predict.numpy(), label))

运行结果:

由于初始化和模型训练轮次的缘故,结果可能不会相同,但最后预测结果和最终标签应该不会差太多

代码下载

代码链接

keras相关版本的全连接层

keras版本的全连接层实现可以参照博主另一个系列的文章:
睿智的keras深度学习(一)——阈值逻辑单元和多层感知机

飞桨深度学习零基础入门(一)——使用飞桨(Paddle)单层神经网络预测波士顿房价相关推荐

  1. 跟着彭亮一起学人工智能之深度学习--零基础学人工智能

    写在前面: 最近,跟着彭亮在麦子学院学习人工智能相关的课程,课程讲的很好,所以打算一边学,一边记.这个系列就当是一个学习笔记.希望可以帮助到更多的人. 注明:此系列课程适用人员为有一定编程基础,最好有 ...

  2. 【二】零基础入门深度学习:用一个案例掌握深度学习方法

    (给机器学习算法与Python学习加星标,提升AI技能) 作者 | 毕然  百度深度学习技术平台部主任架构师 内容来源 | 百度飞桨深度学习集训营 本文转自飞桨PaddlePaddle 导读 从本课程 ...

  3. 【一】零基础入门深度学习:用numpy实现神经网络训练

    (给机器学习算法与Python学习加星标,提升AI技能) 作者 | 毕然 百度深度学习技术平台部主任架构师 内容来源 | 百度飞桨深度学习集训营 本文转自飞桨PaddlePaddle 本课程是百度官方 ...

  4. 【三】零基础入门深度学习:卷积神经网络基础之初识卷积

    (给机器学习算法与Python学习加星标,提升AI技能) 作者 | 孙高峰 百度深度学习技术平台部资深研发工程师 内容来源 | 百度飞桨深度学习集训营 本文转自飞桨PaddlePaddle 导读 百度 ...

  5. AI Studio 飞桨 零基础入门深度学习笔记6.3-手写数字识别之数据处理

    AI Studio 飞桨 零基础入门深度学习笔记6.3-手写数字识别之数据处理) 概述 前提条件 读入数据并划分数据集 扩展阅读:为什么学术界的模型总在不断精进呢? 训练样本乱序.生成批次数据 校验数 ...

  6. AI Studio 飞桨 零基础入门深度学习笔记1-深度学习的定义

    AI Studio 飞桨 零基础入门深度学习-笔记 人工智能.机器学习.深度学习的关系 机器学习 机器学习的实现 机器学习的方法论 案例:牛顿第二定律 确定模型参数 模型结构介绍 深度学习 神经网络的 ...

  7. AI Studio 飞桨 零基础入门深度学习笔记4-飞桨开源深度学习平台介绍

    AI Studio 飞桨 零基础入门深度学习笔记4-飞桨开源深度学习平台介绍 深度学习框架 深度学习框架优势 深度学习框架设计思路 飞桨开源深度学习平台 飞桨开源深度学习平台全景 框架和全流程工具 模 ...

  8. AI Studio 飞桨 零基础入门深度学习笔记2-基于Python编写完成房价预测任务的神经网络模型

    AI Studio 飞桨 零基础入门深度学习笔记2-基于Python编写完成房价预测任务的神经网络模型 波士顿房价预测任务 线性回归模型 线性回归模型的神经网络结构 构建波士顿房价预测任务的神经网络模 ...

  9. 百度飞桨PaddelePaddle-21天零基础实践深度学习-【手写数字任务】2

    百度飞桨PaddelePaddle-21天零基础实践深度学习-[手写数字任务]2 模型设计 网络结构 损失函数 训练配置 优化算法 模型设计 网络结构 全连接神经网络 经典的全连接神经网络来包含四层网 ...

最新文章

  1. 【建模必备】遗传算法应用举例(多元单峰值函数的优化实例)
  2. 新安江遗传算法c语言,基于遗传算法的新安江模型参数优化率定(四)
  3. 美团在Redis上踩过的一些坑-3.redis内存占用飙升
  4. 武侠乂怎么修改服务器,武侠乂怎么操作 按键功能详细介绍
  5. 如何取消重要地点加密_西门子S7-300/400PLC编程之软件加密
  6. 软件开发有哪些规范和标准_车辆,机械专业如何从事汽车电子软件开发
  7. Blender插件之Panel
  8. windows server 2003 IIS 调试 ASP时路径问题
  9. 基于变分模态分解与麻雀优化最小二乘支持向量机的短期电力负荷预测(VMD-SSA-LSSVM)
  10. STM32多通道DMA—ADC采样
  11. 阿里巴巴争夺中国蓬勃发展的电动汽车市场
  12. 如何使用Hyper-V Manager和Powershell合并Hyper-V检查点
  13. Dfinity (ICP)开发基本操作-4
  14. 机器学习复习之逻辑斯蒂回归以及决策树
  15. windows server 2008 r2 分区介绍
  16. vue打包时报错Ineffective mark-compacts near heap limit Allocation failed-JavaScript heap out of memory
  17. win7系统下安装win10实现双系统安装教程
  18. Java开发必须要会!java自动填写网页表单
  19. 推荐学习PPT的几本书
  20. 余弦值(cos)与相关系数(cor)的关系

热门文章

  1. EP-N8530S USB WIFI 驱动移植
  2. java排队系统设计_医院排队系统之简易设计
  3. Django计算机毕业设计母婴用品店管理系统python(源码程序+lw+远程部署)
  4. vue-cli(vue脚手架)
  5. 使用自定义View和属性动画做一个自动动画汉诺塔 !
  6. 带你一起盘点武汉智慧工地那些黑科技
  7. Pycharm ”Cannot Run Git “等一系列Git问题解决方法
  8. Java中modal dialog,showModalDialog模态对话框的使用详解以及浏览器兼容
  9. 活剥MS06-014网马变种纪实
  10. 明渠流量计用于农田灌溉水计量