3.2.2波士顿房价预测

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]))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是一个对称矩阵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值