学了一点点paddlepaddle,就跟着做了波斯顿房价预测,不足之处,请指出。

import paddle.fluid as fluid
import paddle
import numpy as np
import os
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
from sklearn.metrics import mean_squared_errorbuf_size = 500 #设置缓存条数
batch_size = 20 #设置每次获取的条数#获取数据载入内存的地址
train_reader = paddle.batch(paddle.reader.shuffle(paddle.dataset.uci_housing.train(),buf_size=buf_size),batch_size=batch_size)#训练数据地址
test_reader = paddle.batch(paddle.reader.shuffle(paddle.dataset.uci_housing.test(),buf_size=buf_size),batch_size=batch_size)#测试数据地址
#获取数据载入内存的地址#创建x、y、y_predice张量
x = fluid.layers.data(name='x', shape=[13], dtype='float32')#name的‘x’表示张量x,shape为13是因为一行记录有13个字段
y = fluid.layers.data(name='y', shape=[1], dtype='float32')#name的‘y’表示张量y,shape为1是因为目标只有一列数据
y_predice = fluid.layers.fc(input=x, size=1, act=None)#y_predice的输入为‘x’,结果大小size为1,act表示激活函数,act=None表示线性
#创建x、y、y_predice张量#建立指标,此处使用MSE作为指标
cost = fluid.layers.square_error_cost(input=y_predice, label=y)#建立MSE,输入为预测结果y_predice
avg_cost = fluid.layers.mean(cost)#所有样本的MSE求均值
#建立指标#建立优化方法,这里用的是随机梯度下降法
optimizer = fluid.optimizer.SGDOptimizer(learning_rate=0.001)#learning_rate表示学习速率,太低或太高都不能很好训练出好的分类器
opts = optimizer.minimize(avg_cost)#优化准则是让MSE的均值(avg_cost)达到最小(minimize)
#建立优化方法#分配内存、创建执行器、初始化
place = fluid.CPUPlace()#分配内存
exe = fluid.Executor(place)#定义执行器
exe.run(fluid.default_startup_program())#初始化,fluid.default_startup_program()表示默认初始化函数
#分配内存、创建执行器、初始化#创建数值数据转换成x、y特殊类型的数据类型转换器
feeder = fluid.DataFeeder(place=place, feed_list=[x, y])#投喂格式为[x, y],意味着第列表或者数组的第一个元素赋值给x,第二个元素赋值给y
#创建数值数据转换成x、y特殊类型的数据类型转换器train_costs = []#保存训练中的所有样本的MSE值,用于作图,方便观察多次训练中MSE的变化趋势
times = []#保存训练累积的的数据量,以便后期作为每一次训练的MSE指标的横坐标轴的数据
time = 0#表示已经累积的训练的数据量#训练
for i in range(50):#训练次数:50for batch_id, data in enumerate(train_reader()):#根据train_reader保存的地址拿出数据下标以及数据,因为batch_size=20,因此每次拿出20条数据#通过执行器执行fluid.default_main_program(),这是默认的训练函数,feed=feeder.feed(data)表示赋值给[x,y]的数据,fetch_list=[avg_cost]表示标准是MSE的均值train_cost = exe.run(program=fluid.default_main_program(), feed=feeder.feed(data), fetch_list=[avg_cost])train_costs.append(train_cost[0][0])#train_costs每次保存每个样本的MSE值time=time+batch_sizetimes.append(time)print("pass is %d, train_cost is %0.5f"%(batch_id,train_cost[0][0]))for batch_id, data in enumerate(test_reader()):#根据test_reader保存的地址拿出数据下标以及数据,因为batch_size=20,因此每次拿出20条数据#通过执行器执行fluid.default_main_program(),这是默认的训练函数,feed=feeder.feed(data)表示赋值给[x,y]的数据,fetch_list=[avg_cost]表示标准是MSE的均值test_cost = exe.run(program=fluid.default_main_program(), feed=feeder.feed(data), fetch_list=[avg_cost])print("pass is %d, test_cost is %0.5f"%(batch_id,test_cost[0][0]))
#训练#保存训练好的分类器、数据、执行器
inference_path = "d:/inference_model"
fluid.io.save_inference_model(inference_path, ['x'], [y_predice], exe)
#保存训练好的分类器、数据、执行器#画出均方差(MSE)随训练数据量变化而变化的图像
plt.plot(times, train_costs, label="train_costs")
plt.title("train_costs")
plt.xlabel("time")
plt.ylabel("train_cost")
plt.legend(loc="best")
plt.grid()
plt.savefig("d:/result")
plt.show()
#画出均方差(MSE)随训练数据量变化而变化的图像#创建预测执行器
infer_exe = fluid.Executor(place)
inference_scope = fluid.core.Scope()
#创建预测执行器infer_results = []#保存根据信息预测出来的数据(预测房价)
trues = []#保存实际数据(这里指的是实际房价)with fluid.scope_guard(inference_scope):#这个本人不是很懂,请自行查找资料,不便解释#根据保存的分类器路径以及预测执行器,创建出用来预测的分类模型,得到分类器、字段名以及模型的所有输出变量[inference_program, feed_target_names, fetch_targets] = fluid.io.load_inference_model(inference_path, infer_exe)#创建infer_reader张量,指向实际房价的内存空间,且每次导入50条infer_reader = paddle.batch(paddle.dataset.uci_housing.test(), batch_size=50)#导入数据test_data = next(infer_reader())#迭代器,用于把数据导入变量test_x = np.array([data[0] for data in test_data]).astype("float32")test_y = np.array([data[1] for data in test_data]).astype("float32")#导入数据#预测result = infer_exe.run(inference_program, feed={feed_target_names[0]:np.array(test_x)}, fetch_list=fetch_targets)#预测print("inference result:")for i, val in enumerate(result[0]):print("%d:%0.2f"%(i, val))infer_results.append(val)print("true :")for i, val in enumerate(test_y):print("%d:%0.2f"%(i, val))trues.append(val)print("MSE is:",mean_squared_error(infer_results,trues))#对比实际值与预测值,算出均方差(MSE)#画出预测值与实际值的对比图x=np.linspace(0,len(infer_results) , len(infer_results))plt.plot(x,infer_results,"r--",alpha=0.5)plt.plot(x,trues,"g-",alpha=0.5)plt.title("inferences & trues")plt.xlabel("index")plt.ylabel("price")plt.legend(loc="best")plt.grid()plt.savefig("d:/result1")plt.show()#画出预测值与实际值的对比图

运行此程序,得到MSE随训练数据量变化而变化的图以及预测值与实际值的对比图:
注:本人运行时,只能每次保存一张图,所以,先注释掉第二段画图代码,运行一次,得到第一张图,然后取消第二段画图代码的注释,把第一段画图代码注释,再运行一次,即可得到第二张图。


MSE随训练数据量变化而变化图


预测值与实际值的对比图

如图所示,虽然MSE一直随着训练数据集一直在下降,但是看到预测值与实际值的对比图,简直想喷,什么鬼玩意,比我用sklearn做的都随便[○・`Д´・ ○]。
这是之前用sklearn做的:波斯顿房价(lasso、线性回归、留出法、k折交叉验证法)

于是,对代码中的learning_rate以及batch_size进行调整:

learning_rate 5次运行的MSE结果
0.001 21.85131、21.416775、22.21229、23.187798、22.42322
0.0001 109.381905、92.72338、90.271065、83.672005、98.08537
0.01 15.91391、15.491938、16.042923、15.872368、15.816027
0.02 17.838026、18.243011、17.905128、18.266024、17.94241
0.007 15.406478、15.11231、15.98175、15.292198、 15.766372

首先,保持batch_size为20不变,让learning_rate等于0.001、0.0001、0.01,为了防止偶然性,因此每次运行5次,查看MSE值以及预测值与实际值的对比图(图太多,因此不放出来了),通过表格可以观察到,当learning_rate等于0.001时,MSE值是最小的、比较好的,然后让learning_rate等于0.02、0.007(用0.02>0.01>0.007这种关系,判断MSE最小值大概位置)查看MSE结果情况,发现0.007时,效果更优一些,因此可以判断,learning_rate最优值应该在0.001到0.007之间,请有兴趣的人自行尝试。

batch_size 5次运行的MSE结果
20 15.406478、15.11231、15.98175、15.292198、 15.766372
10 17.359602、16.794353、16.94014、17.147373、16.786858
30 15.784001、16.024239、15.492596、15.577423、15.462246
25 15.612396、15.510131、15.327511、15.506023、15.786146

保持learning_rate等于0.007,让batch_size等于10、30、25。当batch_size为10时,每次MSE值均有变大,明显不合适;当batch_size为30时,发现比batch_size为20时MSE似乎大了点,因此让batch_size为25,发现比batch_size为20、30时,MSE略小一些,因此可推测,batch_size的最优值应该在20到30之间,请有兴趣的人自行尝试。
如有错误,请各位指出,谢谢Thanks♪(・ω・)ノ。

波斯顿房价 paddlepaddle 深度学习相关推荐

  1. 飞桨PaddlePaddle深度学习实战

    作者:刘祥龙,杨晴虹,胡晓光,于佃海 著 出版社:机械工业出版社 品牌:机工出版 出版时间:2020-09-01 飞桨PaddlePaddle深度学习实战

  2. PaddlePaddle深度学习7日入门CV篇Summaries

    PaddlePaddle深度学习7日入门CV篇|Summaries 文章目录 PaddlePaddle深度学习7日入门CV篇|Summaries 一.什么是PaddleX? 二.为什么要参加训练营 三 ...

  3. 人工智能AI:TensorFlow Keras PyTorch MXNet PaddlePaddle 深度学习实战 part1

    日萌社 人工智能AI:TensorFlow Keras PyTorch MXNet PaddlePaddle 深度学习实战 part1 人工智能AI:TensorFlow Keras PyTorch ...

  4. 百度官方文档Plus版,PaddlePaddle深度学习框架介绍

    作者:木羊同学 来源:华章计算机(hzbook_jsj) 现在深度学习框架不但内卷严重,而且头部效应明显.一提起深度学习框架,首先想到的肯定是Google家的TensorFlow,和Facebook家 ...

  5. 国产首款——飞桨PaddlePaddle深度学习框架介绍

    现在深度学习框架不但内卷严重,而且头部效应明显.一提起深度学习框架,首先想到的肯定是Google家的TensorFlow,和Facebook家的PyTorch.究竟排名谁先谁后,还要看你是工业界还是学 ...

  6. PaddlePaddle深度学习之车牌识别

    PaddlePaddle深度学习之车牌识别 前提 数据处理 网络结构的建立(LeNet) 训练配置 测试模型准确率 前提 本代码使用的是百度的 PaddlePaddle 深度框架.整体包含数据处理,网 ...

  7. PaddlePaddle 深度学习实战(第三部分)

    PaddlePaddle 深度学习实战(第一部分) PaddlePaddle 深度学习实战(第二部分) PaddlePaddle 深度学习实战(第三部分) PaddlePaddle 深度学习实战(第四 ...

  8. PaddlePaddle | 深度学习 101- 词向量

    本人仅以 PaddlePaddle 深度学习 101 官网教程为指导,添加个人理解和笔记,仅作为学习练习使用,若有错误,还望批评指教.–ZJ 原文地址: PaddlePaddle 官网| Paddle ...

  9. paddlepaddle测试安装_百度paddlepaddle深度学习7日入门-CV疫情特辑心得

    正值疫情严重之日,作为一名研究生被迫待在家里学习,手头的科研项目也严重受挫... 偶然间,看到微信公众号发布这门课,马上报名,入坑!!!瞬间疫情其间有学习的目标了.. 该课程学习依托于百度的AI st ...

最新文章

  1. SQL Server 2008 R2占用内存越来越大解决方法
  2. 部署和调优 1.5 vsftp部署和优化-1
  3. angular中父组件给子组件传值-@input
  4. mysql数据库设置字符集配置修改my.ini文件(windows)
  5. 无线运维——J2ME和WAP运维方式的优缺点
  6. linux 6.5桌面环境kde,CentOS 5/6 安装 GNOME 或 KDE 桌面
  7. 中国联通公布8月运营数据出炉 4G用户大幅度提升
  8. Java关键字:synchronized
  9. linux校验密码错误,linux 命令 如何做密码校验
  10. window7修改屏幕旋转快捷键
  11. 参考文献中文字符间距过大问题
  12. 【算法竞赛学习笔记】佩尔方程-数学提升计划
  13. 2019年全套web前端视频教程链接分享
  14. matlab文字转数据,将文本转换为数值 - MATLAB Simulink - MathWorks 中国
  15. 江南大学计算机应用第三阶段,2019下半年江南大学第三阶段语文英语计算机基..._公共英语考试_帮考网...
  16. 定义一个html文档的范围用什么标签,定义一个HTML文档的范围用()标签 A.ol B.ul C.pre D.html...
  17. 校园跑腿微信小程序跑腿同学带直播新版源码
  18. LTE语音终极解决方案——VoLTE
  19. 采用morison方程基于matlab计算大直径波浪力,小尺寸双柱式桥墩波浪力的数值分析...
  20. 【2022黑马程序员】SQL优化

热门文章

  1. 部分赛车游戏对方向盘支持程度记录
  2. 好玩的程序,看大神如何玩转编程
  3. 初面蚂蚁金服,培训java知识
  4. 无盘服务器多机启动慢,网卡PNP驱动兼容问题导致无盘客户机启动获取DHCP后白条时间长、滚动圈数多、黑屏时间...
  5. 【跨区助手】Apex入库
  6. D23:Multiple of 3 Or 5(3或5的倍数,翻译+题解)
  7. 「智能交通技术」知识星球更新内容(2.20至2.28)
  8. 机器学习第二章之数据分析的基本武器
  9. 海康威视工业相机MV-CE060-10UC使用指北
  10. 是谁说的测试工资高的,应届毕业生,面试测试岗5k薪资都没人要.....