IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 飞桨深度学习零基础入门(一)——使用飞桨(Paddle)单层神经网络预测波士顿房价 -> 正文阅读

[人工智能]飞桨深度学习零基础入门(一)——使用飞桨(Paddle)单层神经网络预测波士顿房价

系列文章往期回顾

飞桨深度学习零基础入门(序)——Python实现梯度下降


一、导入相关依赖包

import paddle
from paddle.nn import Linear
import paddle.nn.functional as F
import numpy as np
import os
import random

其中:
Linear全连接层,在本文中仅采用一个全连接层即单个神经网络对波士顿房价进行预测

二、构建单层神经网络回归类

class Regressor(paddle.nn.Layer):
    def __init__(self):
        super(Regressor, self).__init__()
        self.fc = Linear(in_features=13, out_features=1)
        
    def forward(self, inputs):
        x = self.fc(inputs)
        return x

输入的特征是13个,对于结果仅输出对房价的预测

三、设置参数

model = Regressor()
model.train()
opt = paddle.optimizer.SGD(learning_rate=0.01, parameters=model.parameters())

将单层神经网络回归类实例化之后开启模型训练模式(model.train),设置优化器为随机梯度下降(SGD),并设置学习率为0.01,梯度下载的参数设置为模型所需的参数

四、导入数据集

由于个人很好奇数据集导入的格式,所以采用了keras.datasets来导入了数据集,常规的导入情况请参照上一篇文章

from keras.datasets import boston_housing
(training_data, train_targets), (test_data, test_targets) = boston_housing.load_data()
train_targets = train_targets.reshape((-1, 1))
training_data = np.array(np.concatenate([training_data, train_targets], axis=1).astype(np.double))
test_targets = test_targets.reshape((-1, 1))
test_data = np.array(np.concatenate([test_data, test_targets], axis=1).astype(np.double))

五、数据归一化

maxinums, mininums, avg = training_data.max(axis=0), training_data.min(axis=0), training_data.sum(axis=0) / training_data.shape[0]

training_data, test_data = (training_data - mininums) / (maxinums - mininums), (test_data - mininums) / (maxinums - mininums)

六、训练并保存模型

EPOCH_NUM = 100   # 设置外层循环次数
BATCH_SIZE = 10  # 设置batch大小
for epoch_id in range(EPOCH_NUM):
    # 在每轮迭代开始之前,将训练数据的顺序随机的打乱
    # 将训练数据进行拆分,每个batch包含10条数据
    np.random.shuffle(training_data)
    mini_batches = [training_data[k:k+BATCH_SIZE] for k in range(0, len(training_data), BATCH_SIZE)]
    # 定义内层循环
    for iter_id, mini_batch in enumerate(mini_batches):
        x = np.array(mini_batch[:, :-1]) # 获得当前批次训练数据
        y = np.array(mini_batch[:, -1:]) # 获得当前批次训练标签(真实房价)
        # 将numpy数据转为飞桨动态图tensor形式
       
        house_features = paddle.to_tensor(x)
        house_features = paddle.cast(house_features, dtype="float32")
        prices = paddle.to_tensor(y)
        prices = paddle.cast(prices, dtype="float32")
        
        # 前向计算
        predicts = model(house_features)
        
        # 计算损失
        loss = F.square_error_cost(predicts, label=prices)
        avg_loss = paddle.mean(loss)
        if iter_id % 20==0:
            print("epoch: {}, iter: {}, loss is: {}".format(epoch_id, iter_id, avg_loss.numpy()))
        
        # 反向传播
        avg_loss.backward()
        # 最小化loss,更新参数
        opt.step()
        # 清除梯度
        opt.clear_grad()
        
paddle.save(model.state_dict(), 'LR_model.pdparams')
print("模型保存成功,模型参数保存在LR_model.pdparams中")

七、模型测试

def load_one_example():
    # 从上边已加载的测试集中,随机选择一条作为测试数据
    idx = np.random.randint(0, test_data.shape[0])
    idx = -10
    one_data, label = test_data[idx, :-1], test_data[idx, -1]
    # 修改该条数据shape为[1,13]
    one_data =  one_data.reshape([1,-1])

    return one_data, label

model_dict = paddle.load('LR_model.pdparams')
model.load_dict(model_dict)
model.eval()

# 参数为数据集的文件地址
one_data, label = load_one_example()
# 将数据转为动态图的variable格式 
one_data = paddle.to_tensor(one_data)
one_data = paddle.cast(one_data, dtype='float32')
predict = model(one_data)

# 对结果做反归一化处理
predict = predict * (maxinums[-1] - mininums[-1]) + avg[-1]
# 对label数据做反归一化处理
label = label * (maxinums[-1] - mininums[-1]) + avg[-1]

print("Inference result is {}, the corresponding label is {}".format(predict.numpy(), label))

运行结果:
在这里插入图片描述
由于初始化和模型训练轮次的缘故,结果可能不会相同,但最后预测结果和最终标签应该不会差太多

代码下载

代码链接

keras相关版本的全连接层

keras版本的全连接层实现可以参照博主另一个系列的文章:
睿智的keras深度学习(一)——阈值逻辑单元和多层感知机

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-05 12:02:52  更:2021-12-05 12:03:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 3:42:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码