【深度学习】使用飞桨paddle实现波士顿房价预测任务

使用飞桨实现波士顿房价预测任务

由于开始学习深度学习,因此每次开始都熟悉一下深度学习模型的基本步骤:
在这里插入图片描述
在之前的学习中,我们学习了使用Python和NumPy实现波士顿房价预测任务的方法,本章我们将尝试使用飞桨paddle重写房价预测任务,体会二者的异同。在数据处理之前,需要先加载飞桨框架的相关类库。

1. 数据处理

数据处理的代码不依赖飞桨框架实现,与使用Python构建房价预测任务的代码相同,因此独立为单独的代码。
在这里插入图片描述

# 导入需要用到的package
import numpy as np
from sklearn.preprocessing import MinMaxScaler


def load_data():
    # 从文件导入数据
    datafile = './work/housing.data'
    data = np.fromfile(datafile, sep=' ')
    # 每条数据包括14项,其中前面13项是影响因素,第14项是相应的房屋价格中位数
    feature_names = [ 'CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE',
                      'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV' ]
    feature_num = len(feature_names)
    # 将原始数据进行Reshape,变成[N, 14]这样的形状
    data = data.reshape([data.shape[0] // feature_num, feature_num])
    # 将原数据集拆分成训练集和测试集
    # 这里使用80%的数据做训练,20%的数据做测试
    # 测试集和训练集必须是没有交集的
    ratio = 0.8
    offset = int(data.shape[0] * ratio)
    train_data, test_data = data[:offset], data[offset:]
    # # 计算训练集的最大值,最小值
    # maximums, minimums = training_data.max(axis=0), \
    #                         training_data.min(axis=0)
    #
    # # 对数据进行归一化处理
    # for i in range(feature_num):
    #     data[:, i] = (data[:, i] - minimums[i]) / (maximums[i] - minimums[i])
    # 使用训练集计算最大值和最小值
    scaler = MinMaxScaler()
    # 只在训练集上拟合
    scaler.fit(train_data)
    data = scaler.transform(data)
    # 训练集和测试集的划分比例
    train_data = data[:offset]
    test_data = data[offset:]
    return train_data, test_data

在后续的使用通过引用即可

from load_data import load_data
train_data, test_data = load_data()

2.模型设计

模型设计的实质是定义线性回归的网络结构,建议通过创建Python类的方式构建模型,该类需要继承paddle.nn.Layer父类,并且在类中定义init函数和forward函数。forward是飞桨前向计算逻辑的函数,在调用模型实例时会自动执行,其使用的网络层需要在init中声明。

init函数:在类的初始化函数中声明每一层网络的实现函数。在房价预测任务中,只需要定义一层全连接层。
forward函数:在构建神经网络时实现前向计算过程,并返回预测结果,在本任务中返回的是房价预测结果。

#加载飞桨、NumPy和相关类库
import paddle
from paddle.nn import Linear
import paddle.nn.functional as F
import numpy as np
import os
import random
from load_data import load_data


class Regressor(paddle.nn.Layer):

    # self代表类的实例自身
    def __init__(self):
        # 初始化父类中的一些参数
        super(Regressor, self).__init__()

        # 定义一层全连接层,输入维度是13,输出维度是1
        self.fc = Linear(in_features=13, out_features=1)

    # 网络的前向计算
    def forward(self, inputs):
        x = self.fc(inputs)
        return x

3.训练配置

  • 声明定义好的回归模型实例为Regressor,并将模型的状态设置为train。
  • 使用load_data函数加载训练数据和测试数据。
  • 设置优化算法和学习率,优化算法采用随机梯度下降,学习率设置为0.01。

训练配置的代码实现如下:

# 声明定义好的线性回归模型
model = Regressor()
# 开启模型训练模式,模型的状态设置为train
model.train()
# 使用load_data加载训练集数据和测试集数据
train_data, test_data = load_data()
# 定义优化算法,采用随机梯度下降SGD
# 学习率设置为0.01
opt = paddle.optimizer.SGD(learning_rate=0.005</
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值