0. 前言
波士顿房价预测是一个回归问题,关于波士顿房价预测更多信息自行百度
1. 导入相关库
其中uci_housing是pp中预置的波士顿房价数据集,很多框架都会预置一些常用的数据集
import numpy
import paddle.fluid as fluid
import paddle
import paddle.dataset.uci_housing as uci_housing
import numpy as np
2. 定义网络结构
网络为3层的线性网络,中间两个线性层位size=100的全连接层
# 定义网路模型
x = fluid.data(name='x', shape=[None, 13], dtype="float32") # 用data定义输入数据
hidden = fluid.layers.fc(input=x, size=100, act='relu')
hidden = fluid.layers.fc(input=hidden, size=100, act="relu")
net = fluid.layers.fc(input=hidden, size=1, act=None)
# 复制预测模型
infer_program = fluid.default_main_program().clone(for_test=True) #此时复制的网络仅包含网络结构
3. 定义损失函数
# 定义损失函数
y = fluid.data(name='y', shape=[None, 1], dtype="float32")
batch_cost = fluid.layers.square_error_cost(input=net, label=y)
avg_error = fluid.layers.mean(batch_cost)
4. 定义优化器
# 定义优化方法
optimizer = fluid.optimizer.SGDOptimizer(learning_rate=0.01)
opts = optimizer.minimize(avg_error)
5. 定义执行器
# 创建执行器
place = fluid.CPUPlace()
exe = fluid.Executor(place)
exe.run(fluid.default_startup_program()) # 运行初始化程序
6. 数据加载器
# -reader:指定数据,通过uci_housing.train()获取训练数据,.test()获取到测试数据
train_reader = paddle.batch(reader=uci_housing.train(), batch_size=128)
test_reader = paddle.batch(reader=uci_housing.test(), batch_size=128)
# # 该函数用于接受数据(接受数据器),接受的数据投喂给[x,y]
feeder = fluid.DataFeeder(place=place, feed_list=[x, y]) # feed_list:数据投喂给谁
7. 训练
# 训练
for pass_id in range(300):
train_cost = 0
for batch_id, data in enumerate(train_reader()):
# 因为网络结构损失优化器都自动加载进default_main_program()
# 所以只需要传进入数据feed,定义返回变量值fetch_list,即可
train_cost = exe.run(program=fluid.default_main_program(),
feed=feeder.feed(data),# 可以是字典或列表
fetch_list=[avg_error])
print("Pass:%d, Cost:%0.5f" % (pass_id, train_cost[0][0]))
8. 测试
# 测试
for data in test_reader():
infer_data=numpy.array([data[0] for data in data]).astype("float32")
infer_label=numpy.array([data[1] for data in data]).astype("float32")
infer_result=exe.run(program=infer_program,feed={x.name:infer_data,y.name:infer_label},fetch_list=[net])
for i in range(len(infer_label)):
print("预测结果:%f,真实结果:%f"%(infer_result[0][i][0],infer_label[i][0]))
3682

被折叠的 条评论
为什么被折叠?



