导入需要的模块

import os
import zipfile
import paddle
import numpy as np
from matplotlib import pyplot as plt

设置dtype默认为float64    使用paddle调入uci_housing数据集

先设置数据类型的好处在于可以避免在散点图绘制时,因数据类型不匹配而报错

paddle.set_default_dtype('float64')  #设置全局变量print("数据开始加载")train_dataset = paddle.text.datasets.UCIHousing(mode='train')
eval_dataset = paddle.text.datasets.UCIHousing(mode='test')train_loader = paddle.io.DataLoader(train_dataset, batch_size=32, shuffle=True)
eval_loader = paddle.io.DataLoader(eval_dataset, batch_size=32, shuffle=False)print("数据加载完成")

书写训练模型

我们假定波士顿房价是符合线性的

#线性回归训练模型
class Regressor(paddle.nn.Layer):def __init__(self):super(Regressor, self).__init__()self.linear = paddle.nn.Linear(13, 1, None)   #None 表示不使用激活函数def forward(self, inputs):x = self.linear(inputs)return x

开始训练

#调用模型,并传入参数
mode = Regressor()
mode.train()        #paddle 自带函数 表训练模型
mse_loss = paddle.nn.MSELoss()  #mse 均方误差 处理损失函数 该值越小精确度越高
opt = paddle.optimizer.SGD(learning_rate = 0.005, parameters=mode.parameters())  #opt 函数优化,使预测值不断逼近真实值#SGD随机梯度下降
epoch_nums = 200   #训练数 200轮
all_train_accs = []   #存放训练精度,便于之后绘制图像
all_train_loss = []   #存放训练损失,便于之后绘制图像
Batch = 0
Batches = []
for epoch_num in range(epoch_nums):for batch_id, data in enumerate(train_loader()):feature = data[0]label = data[1]predict = mode(feature)loss = mse_loss(predict, label)loss.backward()      #数据反传opt.step()             #自动完成模型优化和参数更新opt.clear_grad()       #清零,防止梯度累加#可视化输出,便于查看数据进行调整if batch_id != 0 and batch_id%10 == 0:Batch += 10Batches.append(Batch)all_train_loss.append(loss.numpy()[0])#all_train_accs.append(accs.numpy()[0])print('epoch:{}, step:{}, train_loss:{}'.format(epoch_num, batch_id, loss.numpy()[0]))paddle.save(mode.state_dict(),'Regressor')  #保存训练结果,方便后面整理

绘制折线图观察损失收敛的情况

#损失制图,可视化操作,观察训练结果
def draw_train_loss(Batches, train_loss):title = 'training loss'plt.title(title, fontsize = 24)plt.xlabel('Batch', fontsize = 16)plt.ylabel('Loss', fontsize = 16)plt.plot(Batches, train_loss, color = 'red', label = 'training loss')plt.legend()plt.grid()plt.show()
draw_train_loss(Batches, all_train_loss)

输出结果:

训练结果还是可以接受的,和老师讲的也相近

模型评估 看看训练的好不好

#模型评估 输出在验证集上的损失值
para_state_dict = paddle.load('Regressor')
mode = Regressor()   #虽然上边已经调用过一次了,但这里为了代码的可复用还是再声明一次
mode.set_state_dict(para_state_dict)    #加载模型参数
mode.eval()   #测试模式losses = []
infer_truths = []
ground_truths = []for batch_id, data in enumerate(eval_loader):feature = data[0]label = data[1]ground_truths.extend(label.numpy())predict = mode(feature)infer_truths.extend(predict.numpy())loss = mse_loss(predict, label)losses.append(loss.numpy()[0])avg_loss = np.mean(losses)
print("当前训练模型载验证集上的损失值是:", avg_loss)

结果:

当前训练模型载验证集上的损失值是: 14.965278549837329

散点图对比

def draw_infer_result(ground_truths, infer_truths):title = 'BPSTON'plt.title(title, fontsize = 32)x = np.arange(1,30)y = xplt.plot(x,y)plt.xlabel('Ground',fontsize = 16)plt.ylabel('Infer',fontsize = 16)plt.scatter(ground_truths, infer_truths, color = 'green', label='training cost')plt.legend()plt.grid()plt.show()

调用:

draw_infer_result(ground_truths, infer_truths)

输出结果:

提问:list.extend() 和 list.append()  有什么不同,代码中,为什么有的用了extend 有的用了append?

心得总结:

哎啊,初学搞懂这些确实不容易,现在可以自信地说这些代码懂了80%了吧,还蛮开心的。

因为一直有学校的专业课程,所以就是断断续续,到今天差不多有20多天了吧,总算可以独立把代码敲下来。或许三天打鱼两天晒网也是一个不错的学习方法,哈哈,因为顺应自然的节奏,全靠自然驱动,然后和顿悟撞个满怀。

飞桨的"问号"查询法帮助还挺大的,具体怎么操作,我放在下方的代码块中。看英文其实比理解中午更直接一点,一些语义翻译成中文总是有点绕口。

好了,这是今天的小确幸,做一个快乐学习的人儿。

"问号"查询方式

?paddle.nn.Layer

查询结果

Init signature: paddle.nn.Layer(name_scope=None, dtype='float32')
Docstring:
Dynamic graph Layer based on OOD, includes the parameters of the layer, the structure of the forward graph and so on.Parameters:name_scope (str, optional): prefix name used by the layer to name parameters.If prefix is "my_layer", parameter name in MyLayercan be "my_layer_0.w_n", where "w" is the parameterbase name and "n" is an unique suffix auto-generated.If None, prefix name will be snake cased class name. Default: None.dtype(str, optional): data type of this parameter.If set str, it can be "bool",  "float16", "float32", "float64","int8", "int16", "int32", "int64", "uint8" or "uint16".Default: "float32"Returns:None
Init docstring: __init__(self: paddle.fluid.core_avx.Layer) -> None
File:           /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py
Type:           type
Subclasses:     Sequential, ParameterList, LayerList, Conv2D, Conv3D, Conv3DTranspose, Pool2D, Linear, InstanceNorm, BatchNorm, ...

飞桨 DNN波士顿房价预测相关推荐

  1. 教你使用百度深度学习框架PaddlePaddle完成波士顿房价预测(新手向)

    首先,本文是一篇纯新手向文章,我自己也只能算是入门,有说错的地方欢迎大家批评讨论 目录 一.人工智能.机器学习.深度学习 二.PaddlePaddle(飞桨) 三.波士顿房价预测模型 数据处理 模型设 ...

  2. PaddlePaddle实现波士顿房价预测

    PaddlePaddle实现波士顿房价预测 AIStudio地址 Github地址 #加载飞桨.Numpy 和相关库 import paddle import paddle.fluid as flui ...

  3. 统计学习基础:数据挖掘、推理和预测_百度零基础深度学习笔记(三) 波士顿房价预测...

    波士顿房价预测 波士顿房价预测是一个经典的机器学习任务,期待构建一个房价预测模型,其数据中包含13个影响房价的因素和该类型房屋均价. 波士顿房价影响因素 数据预处理 数据预处理包括: 数据导入 数据形 ...

  4. 深度学习经典入门项目—波士顿房价预测

    目录 房价预测--线性回归 数据处理 数据形状变换 数据集划分 数据归一化处理 housing.data数据格式 模型设计 线性回归模型设计 训练配置 训练过程 保存并测试模型 保存模型 测试模型 房 ...

  5. PaddlePaddle基本用法详解(一)、PaddelPaddle进行波士顿房价预测

    PaddlePaddle基本用法详解(一).PaddelPaddle进行波士顿房价预测 # helloworld示例 import paddle.fluid as fluid # 创建两个类型为int ...

  6. 机器学习(11)线性回归(2)实战 -- 正规方程优化、梯度下降优化(波士顿房价预测)

    目录 一.波士顿房价预测(正规方程优化) API 1.获取数据集 2.划分数据集 3.标准化 4. 创建预估器,得到模型 5.模型评估(均方差评估) 代码 二.波士顿房价预测(正规方程优化) API ...

  7. 竞赛大杀器xgboost,波士顿房价预测

    经常出入DC竞赛.kaggle.天池等大数据比赛的同学应该很了解xgboost这座大山. 几乎所有的比赛都绕不过它,可能只需要这一个库,在比赛中就可以得到很高的分数,究竟是为什么呢?那么就来窥探一下它 ...

  8. 线性回归之案例:波士顿房价预测

    线性回归之案例:波士顿房价预测 数据介绍   [13个特征值,1个目标值] 给定的这些特征,是专家们得出的影响房价的结果属性.此阶段不需要自己去探究特征是否有用,只需要使用这些特征.到后面量化很多特征 ...

  9. 【深度学习】实战Kaggle竞赛之线性模型解决波士顿房价预测问题(Pytorch)

    [深度学习]实战Kaggle竞赛之线性模型解决波士顿房价预测问题 文章目录 1 概述1.1 Competition Description1.2 Practice Skills 2 数据处理 3 训练 ...

最新文章

  1. NVIDIA 自动驾驶软件平台
  2. NS2中802.11代码深入理解—packet传输的流程 (转帖)
  3. 拒收苹果超10万元赏金!程序员小哥找出iCloud账户漏洞后,发文直指苹果不够公开透明...
  4. 【MFC】MFC开发之前言
  5. 【翻译】Designing Websites for iPhone X
  6. 小程序资源服务器,开发小程序没有服务器资源
  7. C++--第20课 - 函数模板
  8. 强制卸载kernel
  9. 喜欢的歌——星月神话(金莎)
  10. 用protobuf进行C#与Java通信
  11. MySQL创建网吧管理系统_java网吧信息管理系统
  12. HHUOJ 1860 哆啦A梦的口袋
  13. java线程的五种状态
  14. 联想服务器装系统极慢,联想win10系统安装版重装后运行速度变慢了
  15. 奇安信技术总监熬夜总结,全网最全内网渗透姿势!
  16. 苹果4计算机错误怎么办,苹果刷机失败卡在恢复模式怎么办?
  17. Flask外部访问服务器最简单的操作
  18. 干货 | Trip.com APP QUIC应用和优化实践
  19. 2022 精心整理的 C语言/C++ 语言学习宝藏,值得收藏~
  20. 一年卖出1500万支的钟薛高,正在通过企业微信和顾客“社交”

热门文章

  1. 线性代数学习笔记——第五十三讲——齐次方程组求解实例
  2. 短视频的素材在哪里找呢?推荐给你一个好办法
  3. 戴尔笔记本重装系统按f几进入
  4. node爬取墨迹天气数据发送定时邮件
  5. 怎样才算是好程序员?关于好程序员与好代码的杂谈
  6. Linux系统检测工具
  7. 【055】工信部领导莅临翼辉参观指导工作
  8. DOM及DOM二级事件
  9. 【无标题】2021年施工员-装饰方向-岗位技能(施工员)考试题及施工员-装饰方向-岗位技能(施工员)考试试卷
  10. java socket 读取文件_java中ServerSocket读取文件流不是分行读取