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进行波士顿房价预测相关推荐

  1. PaddlePaddle基本用法详解(二)、PaddelPaddle训练水果分类模型

    PaddlePaddle基本用法详解(二).PaddelPaddle训练分类模型 1.基本用法 2.训练水果分类模型 1.基本用法 2.训练水果分类模型 1.数据集预处理与模型定义代码: import ...

  2. python argv 详解_Python3 sys.argv[ ]用法详解

    sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个"外部"很关键,因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可 ...

  3. oracle中的exists 和 not exists 用法详解

    from:http://blog.sina.com.cn/s/blog_601d1ce30100cyrb.html oracle中的exists 和 not exists 用法详解 (2009-05- ...

  4. ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)

    ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多) https://blog.csdn.net/qq_25221835/article/details/82762416 post ...

  5. python的继承用法_【后端开发】python中继承有什么用法?python继承的用法详解

    本篇文章给大家带来的内容是关于python中继承有什么用法?python继承的用法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 面向对象三大特征 1.封装:根据职责将属性和方法 ...

  6. C++中substr()函数用法详解

    C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...

  7. php theme_path,PHP_Yii2主题(Theme)用法详解,本文实例讲述了Yii2主题(Theme) - phpStudy

    Yii2主题(Theme)用法详解 本文实例讲述了Yii2主题(Theme)用法.分享给大家供大家参考,具体如下: 首先看看主要的配置方式: 'components' => [ 'view' = ...

  8. LayoutInflater的inflate函数用法详解

    LayoutInflater的inflate函数用法详解 LayoutInflater作用是将layout的xml布局文件实例化为View类对象. 获取LayoutInflater的方法有如下三种: ...

  9. Ext.Net学习笔记22:Ext.Net Tree 用法详解

    上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat="server"><Root> ...

最新文章

  1. 什么是整型?Python整型详细介绍
  2. 在SQL Server中判断一个作业是否正在运行
  3. 框架中的左侧菜单关联右侧页面是如何实现的_前端基础学习:Vue2.0实现移动端外卖平台项目,参考旧版饿了么!...
  4. [Java]Thinking in Java 练习2.2
  5. JAVA中list.contains()方法,要重写equals(),hashcode()方法
  6. 雅加达poi_雅加达EE:干净的板岩
  7. TreeView的基本使用 1205
  8. web服务器压力测试工具
  9. 未来两年我们即将要读的Python书!
  10. oracle11g64位精简版客户端,oracle11g 64位|oracle11g 64位客户端下载 附安装教程 - 121下载站...
  11. php 硬盘序号_关于取硬盘序列号
  12. 本科毕设不通过是什么原因,哪个少年不曾为如何能够顺利优秀毕业而愁眉苦战
  13. 收费java代码_基于jsp的高速公路收费-JavaEE实现高速公路收费 - java项目源码
  14. OpenCASCADE:Qt OCCT 概览示例
  15. 搭建MYS-SAM9X5开发环境
  16. ios 凭据验证_苹果内购服务器验证凭证回执Data
  17. 第112章 Caché 函数大全 $ZPOSITION 函数
  18. 从阿里云下载centos的步骤
  19. Android调用系统相机拍摄视频以及获取缩略图
  20. 补肾传奇赞地黄,九蒸九晒熟地黄

热门文章

  1. 什么是TTL电平、CMOS电平?两者的区别
  2. 《JavaScript权威指南第7版》第14章 元编程
  3. Hack This Site Realistic 1
  4. Excel将另一文件数据导入当前表格内方法详解(文件与文件的连携)
  5. Iterator 源码
  6. Python中网络编程对 socket accept 函数的理解
  7. 中国公司海外收购 金融企业免谈?
  8. 一个线程两次调用sart()方法会出现什么情况?
  9. erwin教程 mysql_ERWin中生成Oracle数据库
  10. 台式电脑(ubuntu系统)开机界面循环This product is covered by one or more of the following patents