PaddlePaddle基本用法详解(一)、PaddelPaddle进行波士顿房价预测
PaddlePaddle基本用法详解(一)、PaddelPaddle进行波士顿房价预测
# helloworld示例
import paddle.fluid as fluid
# 创建两个类型为int64, 形状为1*1张量
x = fluid.layers.fill_constant(shape=[1], dtype="int64", value=5)
y = fluid.layers.fill_constant(shape=[1], dtype="int64", value=1)
z = x + y # z只是一个对象,没有run,所以没有值# 创建执行器
place = fluid.CPUPlace() # 指定在CPU上执行
exe = fluid.Executor(place) # 创建执行器
result = exe.run(fluid.default_main_program(),fetch_list=[z]) #返回哪个结果 执行默认的fluid.default_main_program()
print(result) # result为多维张量
import paddle.fluid as fluid
import numpy# 创建x, y两个2行3列,类型为float32的变量(张量)
x = fluid.layers.data(name="x", shape=[2, 3], dtype="float32")
y = fluid.layers.data(name="y", shape=[2, 3], dtype="float32")x_add_y = fluid.layers.elementwise_add(x, y) # 两个张量按元素相加
x_mul_y = fluid.layers.elementwise_mul(x, y) # 两个张量按元素相乘place = fluid.CPUPlace() # 指定在CPU上执行
exe = fluid.Executor(place) # 创建执行器
exe.run(fluid.default_startup_program()) # 初始化网络a = numpy.array([[1, 2, 3],[4, 5, 6]]) # 输入x, 并转换为数组
b = numpy.array([[1, 1, 1],[2, 2, 2]]) # 输入y, 并转换为数组params = {"x": a, "y": b}
outs = exe.run(fluid.default_main_program(), # 默认程序上执行feed=params, # 喂入参数fetch_list=[x_add_y, x_mul_y]) # 获取结果
for i in outs:print(i)
# 简单线性回归
import paddle
import paddle.fluid as fluid
import numpy as np
import matplotlib.pyplot as plt# 制作数据集
train_data = np.array([[0.5], [0.6], [0.8], [1.1], [1.4]]).astype("float32")
y_true = np.array([[5.0], [5.5], [6.0], [6.8], [6.8]]).astype("float32")# 定义数据类型变量
x = fluid.layers.data(name="x", shape=[1], dtype="float32")
y = fluid.layers.data(name="y", shape=[1], dtype="float32")
# 通过全连接网络进行预测
y_predict = fluid.layers.fc(input=x, # 输入数据size=1, # 输出数据act=None) # 因为是回归问题。所以不使用激活函数
# 添加损失函数
cost = fluid.layers.square_error_cost(input=y_predict, label=y) # 求得与测试与真实值的差值,再求平方
avg_cost = fluid.layers.mean(cost) # 在求得平均值# 定义优化方法
optimizer = fluid.optimizer.SGD(learning_rate=0.01)
optimizer.minimize(avg_cost) # 指定最小化房差值# 搭建网络
place = fluid.CPUPlace() # 指定在CPU执行
exe = fluid.Executor(place)
exe.run(fluid.default_startup_program()) # 初始化系统参数# 开始迭代,迭代100次
costs = []
iters = []
values = []
params = {"x": train_data, "y": y_true}
for i in range(200):outs = exe.run(feed=params, fetch_list=[y_predict, avg_cost])iters.append(i) # 迭代次数costs.append(outs[1][0]) # 损失值print("i:", i, "cost:", outs[1][0])# 线性模型可视化
tmp = np.random.rand(10, 1) # 产生10行1列均匀随机数组
tmp = tmp * 2 # 调整值范围
tmp.sort(axis=0) # 排序
x_test = np.array(tmp).astype("float32")
params={"x":x_test,"y":x_test} # 传y仅仅是为了避免语法错误
y_out = exe.run(feed=params, fetch_list=[y_predict]) # 进行预测
y_test=y_out[0] # 取出预测结果# 绘制回归的曲线
plt.figure("Infer") # 创建一张图
plt.title("Linear Regression",fontsize=24) # 设置标题
plt.plot(x_test,y_test,color="red",label="Infer") # 绘制回归的曲线
plt.scatter(train_data,y_true) # 绘制散点图
plt.legend() # 绘制图例
plt.grid() # 绘制网格线
plt.savefig("infer.png")# 绘制损失函数的曲线图
plt.figure("Training") # #创建另外一个窗体
plt.title("Training Cost",fontsize=24) # 设置标题
plt.xlabel("Iter",fontsize=14)
plt.ylabel("Cost",fontsize=14)
plt.plot(iters,costs,color="red",label="Training Cost")
plt.legend()
plt.grid()
plt.savefig("train.png")
plt.show()
# 05_reader_demo_demo.py
# 读取文件样本实例
import paddle.fluid as fluid
import paddle
import numpy# 1、定义原始读取器
def reader_creator(file_path): # 原始读取器def reader():with open(file_path,"r") as f:lines = f.readlines() # 读取所有行。返回一个列表for line in lines:yield line.replace("\n","") # 生成数据对象并返回 (即每次调用时返回一行数据,下次调用时返回此行的下一行数据)return readerreader = reader_creator(r"D:\project\paddle_learn\day06\test.txt")
# 2、将原始读取器包装成随机读取器
capacity=10 # capacity:表示缓冲区的大小
# 将原始的读取器传至paddleshuffle中进行数据的打乱操作
shuffle_reader= paddle.reader.shuffle(reader,capacity) # 将其包装成随机读取器 capacity:表示缓冲区的大小 (缓冲区的大小只会影响预分配内存的大小)
# 3、将随机读取器包装成批量读取器(即得到一个随机批量的读取器)
batch_size=5 # 表示每一个批次读取的大小
batch_reader = paddle.batch(shuffle_reader,batch_size)# 从随机批量读取器中进行迭代
for data in batch_reader(): # 从随机批量读取器中进行迭代print(data)
# 多元回归示例:波士顿房价预测
''' 数据集介绍:1) 共506行,每行14列,前13列描述房屋特征信息,最后一列为价格中位数2) 考虑了犯罪率(CRIM) 宅用地占比(ZN)非商业用地所占尺寸(INDUS) 查尔斯河虚拟变量(CHAS)环保指数(NOX) 每栋住宅的房间数(RM)1940年以前建成的自建单位比例(AGE) 距离5个波士顿就业中心的加权距离(DIS)距离高速公路便利指数(RAD) 每一万元不动产税率(TAX)教师学生比(PTRATIO) 黑人比例(B)房东属于中低收入比例(LSTAT)
'''import paddle
import paddle.fluid as fluid
import numpy as np
import os
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt# step1:数据准备
# paddle提供了uci_housing训练集、测试集,直接读取并返回数据
BUF_SIZE = 500
BATCH_SIZE = 20# 训练数据集读取器
# 将原始读取器封装为随机读取器
random_reader = paddle.reader.shuffle(paddle.dataset.uci_housing.train(),buf_size=BUF_SIZE) # 创建随机读取器# 再花瓣飞随机读取器包装为随机批量读取器
train_reader = paddle.batch(random_reader,batch_size=BATCH_SIZE) # 训练数据读取器# 打印数据
# train_data = paddle.dataset.uci_housing.train()
for sample_data in train_reader():print(sample_data)# step2:配置网络
# 定义输入、输出,类型均为张量
x = fluid.layers.data(name="x", shape=[13], dtype="float32")
y = fluid.layers.data(name="y", shape=[1], dtype="float32")# 定义简单的线性网络,连接输入层与输出层
y_predict = fluid.layers.fc(input=x, # 输入数据size=256, # 输出值个数act=None)
y_predict = fluid.layers.fc(input=y_predict, # 输入数据size=1, # 输出值个数act=None)# 定义损失函数,并将损失函数指定给优化器
cost = fluid.layers.square_error_cost(input=y_predict, # 预测值,张量label=y # 期望值,张量)
avg_cost = fluid.layers.mean(cost) # 求损失平均值
optimizer = fluid.optimizer.SGDOptimizer(learning_rate=0.001) # 使用随机梯度下降优化器
opts = optimizer.minimize(avg_cost) # 优化器最小化损失值# 创建新的program用于测试计算
test_program = fluid.default_main_program().clone(for_test=True)# step3:模型训练、模型评估
place = fluid.CPUPlace()
exe = fluid.Executor(place)
exe.run(fluid.default_startup_program()) # 初始化变量# 数据喂入器
feeder = fluid.DataFeeder(place=place, feed_list=[x, y]) # 数据喂入器,将数据转换为神经网络所需要的张量形式iter=0
iters=[] # 存放迭代次数
train_costs=[] # 存放每轮训练损失函数值EPOCH_NUM=200
model_save_dir = "./model/uci_housing" # 模型保存路径for pass_id in range(EPOCH_NUM):train_cost = 0i = 0for data in train_reader(): # 从随机批量读取器中读取批量数据i += 1train_cost = exe.run(program=fluid.default_main_program(),feed=feeder.feed(data), # 将data转换为神将网络所需要的张量格式,并喂入fetch_list=[avg_cost]) # 指定要获取的哪个结果if i % 20 == 0: # 每20笔打印一次损失函数值print("PassID: %d, Cost: %0.5f" % (pass_id, train_cost[0][0]))iter = iter + BATCH_SIZE # 加上每批次笔数iters.append(iter) # 记录笔数train_costs.append(train_cost[0][0]) # 记录损失值# 保存模型
if not os.path.exists(model_save_dir): # 如果存储模型的目录不存在,则创建os.makedirs(model_save_dir)
fluid.io.save_inference_model(model_save_dir, # 保存模型的路径["x"], # 预测需要喂入的数据 (即表明x需要传参)[y_predict], # 保存预测结果的变量exe) # 模型(执行器)# 训练过程可视化
plt.figure("Training Cost")
plt.title("Training Cost", fontsize=24)
plt.xlabel("iter", fontsize=14)
plt.ylabel("cost", fontsize=14)
plt.plot(iters, train_costs, color="red", label="Training Cost")
plt.grid()
plt.savefig("train.png")#####################################模型预测####################################################
# step4: 模型预测
infer_exe = fluid.Executor(place) # 创建用于预测的Executor
# infer_scope = fluid.core.Scope() # 修改全局/默认作用域, 运行时中的所有变量都将分配给新的scope
infer_result = [] #预测值列表
ground_truths = [] #真实值列表# with fluid.scope_guard(infer_scope):
# 加载模型,返回三个值
# program: 预测程序(包含了数据、计算规则)
# feed_target_names: 需要喂入的变量
# fetch_targets: 预测结果保存的变量
[infer_program, feed_target_names, fetch_targets] = \fluid.io.load_inference_model(model_save_dir, # 模型保存路径infer_exe) # 要执行模型的Executor
# 获取测试数据
infer_reader = paddle.batch(paddle.dataset.uci_housing.test(),batch_size=200) # 测试数据读取器
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")x_name = feed_target_names[0] # 模型中保存的输入参数名称
results = infer_exe.run(infer_program, # 预测programfeed={x_name: np.array(test_x)}, # 喂入预测的值fetch_list=fetch_targets) # 预测结果
# 预测值
for idx, val in enumerate(results[0]):print("%d: %.2f" % (idx, val))infer_result.append(val)# 真实值
for idx, val in enumerate(test_y):print("%d: %.2f" % (idx, val))ground_truths.append(val)# 可视化
plt.figure('scatter')
plt.title("TestFigure", fontsize=24)
plt.xlabel("ground truth", fontsize=14)
plt.ylabel("infer result", fontsize=14)
x = np.arange(1, 30)
y = x
plt.plot(x, y)
plt.scatter(ground_truths, infer_result, color="green", label="Test")
plt.grid()
plt.legend()
plt.savefig("predict.png")
plt.show()
# plt.savefig("predict.png")
PaddlePaddle基本用法详解(一)、PaddelPaddle进行波士顿房价预测相关推荐
- PaddlePaddle基本用法详解(二)、PaddelPaddle训练水果分类模型
PaddlePaddle基本用法详解(二).PaddelPaddle训练分类模型 1.基本用法 2.训练水果分类模型 1.基本用法 2.训练水果分类模型 1.数据集预处理与模型定义代码: import ...
- python argv 详解_Python3 sys.argv[ ]用法详解
sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个"外部"很关键,因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可 ...
- oracle中的exists 和 not exists 用法详解
from:http://blog.sina.com.cn/s/blog_601d1ce30100cyrb.html oracle中的exists 和 not exists 用法详解 (2009-05- ...
- ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)
ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多) https://blog.csdn.net/qq_25221835/article/details/82762416 post ...
- python的继承用法_【后端开发】python中继承有什么用法?python继承的用法详解
本篇文章给大家带来的内容是关于python中继承有什么用法?python继承的用法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 面向对象三大特征 1.封装:根据职责将属性和方法 ...
- C++中substr()函数用法详解
C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...
- php theme_path,PHP_Yii2主题(Theme)用法详解,本文实例讲述了Yii2主题(Theme) - phpStudy
Yii2主题(Theme)用法详解 本文实例讲述了Yii2主题(Theme)用法.分享给大家供大家参考,具体如下: 首先看看主要的配置方式: 'components' => [ 'view' = ...
- LayoutInflater的inflate函数用法详解
LayoutInflater的inflate函数用法详解 LayoutInflater作用是将layout的xml布局文件实例化为View类对象. 获取LayoutInflater的方法有如下三种: ...
- Ext.Net学习笔记22:Ext.Net Tree 用法详解
上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat="server"><Root> ...
最新文章
- 什么是整型?Python整型详细介绍
- 在SQL Server中判断一个作业是否正在运行
- 框架中的左侧菜单关联右侧页面是如何实现的_前端基础学习:Vue2.0实现移动端外卖平台项目,参考旧版饿了么!...
- [Java]Thinking in Java 练习2.2
- JAVA中list.contains()方法,要重写equals(),hashcode()方法
- 雅加达poi_雅加达EE:干净的板岩
- TreeView的基本使用 1205
- web服务器压力测试工具
- 未来两年我们即将要读的Python书!
- oracle11g64位精简版客户端,oracle11g 64位|oracle11g 64位客户端下载 附安装教程 - 121下载站...
- php 硬盘序号_关于取硬盘序列号
- 本科毕设不通过是什么原因,哪个少年不曾为如何能够顺利优秀毕业而愁眉苦战
- 收费java代码_基于jsp的高速公路收费-JavaEE实现高速公路收费 - java项目源码
- OpenCASCADE:Qt OCCT 概览示例
- 搭建MYS-SAM9X5开发环境
- ios 凭据验证_苹果内购服务器验证凭证回执Data
- 第112章 Caché 函数大全 $ZPOSITION 函数
- 从阿里云下载centos的步骤
- Android调用系统相机拍摄视频以及获取缩略图
- 补肾传奇赞地黄,九蒸九晒熟地黄
热门文章
- 什么是TTL电平、CMOS电平?两者的区别
- 《JavaScript权威指南第7版》第14章 元编程
- Hack This Site Realistic 1
- Excel将另一文件数据导入当前表格内方法详解(文件与文件的连携)
- Iterator 源码
- Python中网络编程对 socket accept 函数的理解
- 中国公司海外收购 金融企业免谈?
- 一个线程两次调用sart()方法会出现什么情况?
- erwin教程 mysql_ERWin中生成Oracle数据库
- 台式电脑(ubuntu系统)开机界面循环This product is covered by one or more of the following patents