Tf.keras 实现线性回归 | 学习笔记

简介: 快速学习 Tf.keras 实现线性回归

开发者学堂课程【Tensorflow2.0入门与实战Tf.keras 实现线性回归】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/664/detail/11099


Tf.keras 实现线性回归


内容介绍

一.如何使用 tf.keras 来建立模型

二.如何使用 tf.keras 来实现通过受教育年限预测收入情况

一. 建立模型

上节课引入了 tensorflow 版本为2.0,读取了 Income 数据集。

1、首先把变量和因变量x和y写出来,变量 x=data.Education 受教育年限,y=data.Income。

2、建立一个模型需要一种顺序模型。顺序模型指有一个输入和一个输出,他们之间的网络是顺序搭建的。就像一个积木要一层一层的搭建。这种模型叫model=tf.keras.Sequential,这个模型为初始化模型没有任何东西。

3、可以通过 model.add 添加层。tf.keras.layers. 有很多层帮助我们使用,最常用的层为 Dense 层,Dense 有两个要注意的参数,第一个输出数据的维度。因为方程是f(x)=ax+b,输出的维度是1,Dense 的输出数据为1。

输入的数据 input_shape 的形状,输入的数据为1维的数据,x=data.Education只有一个变量,所以 input_shape=(1,)))模型建立完成。

x=data.Education

y=data.Income

model =tf.keras.Sequential()

model.add(tf.keras.layers.Dense(1,input_shape=(1)))

4、Model.summary() 会反映模型正确的形状。模型为 Dense 层,Out Shape 显示为(None,1),对于(None,1)这个神经网络的第一个维度代表样本的维度。如果输入样本100个那么 None 为100。输入的样本不一定,如果做成一个批次一个批次的输进去,比如50,50那么就会变成50。

注意第一个维度代表样本的个数,在建立模型时不需要去考虑,第二个维度代表输出的维度。Param 有两个参数,输出为1。

Dense 根据输入把维度1的变换成 ax+b,初始化了两个变量第一个作为权重乘以参数 w+ 自己初始化的变量得到一个输出值。输出是预测值。建立好一个 model。

model.add(tf.keras.layers.Dense(1,input_shape=(1,)))

model.summary()

Model:"sequential"

image.png

5、对 model 进行编译,编译可认为是一个配置的过程,使用梯度下降算法对损失函数进行优化,梯度下降算法的原理和方法后面会讲到。model.compile使用(optimizer=‘adam‘)tensorflow 有很多优化方法,沿着梯度下降的方法会计算梯度去改变变量的值从而求出变量的最小值,最常用的 adam 方法需要知道优化的损失函数 loss 值是什么,使用均方差简写 mse,优化的目标是 loss 全部抽象化,直接用字符串标志使用的方法。模型编译完成。

模型训练使用 history=model.fit(x,y),输入x,y值,训练的过程是不断逼近a,b最小值的过程,所以训练的循环要多次。epochs 代表所有数据的训练次数 history=model.fit(x,y,epochs=5000)。loss 的值开始是6073会不停的下降,到5000次下降到248。通过优化算法使得 loss 的值下降。

model.compile(optimizer='adam',

loss=' mse'

history=model.fit(x,y,epochs=5000)

Epoch 1/5000

30/30[==============================]-0s2ms/sample-loss:6073.6528

Epoch 2/5000

30/30[==============================]-0s327us/sample-loss:6070.9722

Epoch 3/5000

30/30[==============================]-0s53us/sample-loss:6068.2915

Epoch 4/5000

30/30[==============================]-0s32us/sample-loss:6065.6123

Epoch 4997/5000

30/30[==============================]-0s33us/sample-loss:249.2703

Epoch 4998/5000

30/30[==============================]-0s33us/sample-loss:249.0830

Epoch 4999/5000

30/30[==============================]-0s33us/sample-loss:248.8958

Epoch 5000/5000

30/30[==============================]-0s33us/sample-loss:248.7089

 

二.预测收入

使用 model 来预测用 model.predict(x),loss 的值是一种 pd.Series。

In : model.predict(x)

Out:array([[27.074318],

[28.011703],

[29.042831],

[29.980217],

[30.917603],

[31.948729],

[32.886112],

[33.8235  ],

预测未知年限使用 model.predict(pd.Series)([20])

model.predict(pd.Series([20]))

array([[50.430862]],dtype=float32)

相关文章
|
索引
UniApp 组件 u-tabs 详细讲解
UniApp 组件 u-tabs 详细讲解
2928 1
|
10月前
|
人工智能 并行计算 安全
用户实操:如何以龙蜥操作系统为底座在 CPU 上运行 DeepSeek-R1
介绍如何在 CPU 上使用 llama.cpp 推理 671B 版本的 DeepSeek R1,以及实际效果。
|
Java
Java“非静态方法 ... 不能在静态上下文中被引用”解决
在Java中,“非静态方法……不能在静态上下文中被引用”的错误通常源于在静态方法中直接调用非静态方法。解决方法包括:1) 创建类的实例后调用;2) 将非静态方法改为静态方法;3) 重新评估和调整类的设计以避免此类问题。
2007 1
|
存储 关系型数据库 MySQL
binlog、redolog、undo log底层原理及ACID特性实现分享
在数据库管理系统中,日志机制是确保数据一致性、完整性和可靠性的关键组件。MySQL数据库中的binlog、redolog和undolog作为其核心日志系统,各自扮演着不同但同样重要的角色。本文将深入探讨这三种日志的底层原理以及它们如何分别实现ACID(原子性、一致性、隔离性、持久性)特性的不同方面。
317 0
聊聊自动化测试的度量指标
在聊自动化测试度量指标前,有必要回到做自动化的初衷上,就是为什么要做自动化测试,要解决什么问题。
|
缓存 关系型数据库 MySQL
如何优化MySQL 8.0的性能?
【6月更文挑战第14天】如何优化MySQL 8.0的性能?
1826 5
|
运维 供应链 安全
从方法论到最佳实践,深度解析企业云原生 DevSecOps 体系构建
本文主要介绍了云原生安全的现状以及企业应用在云原生化转型中面临的主要安全挑战以及相对成熟的一部分安全体系方法论,深度解析企业云原生 DevSecOps 体系构建。
|
存储 分布式计算 Hadoop
手把手教你使用OSS-HDFS服务平替自建HDFS
本文主要介绍了OSS-HDFS服务以及使用OSS-HDFS服务平替自建HDFS。
131097 21
|
数据建模 测试技术 Shell
【原型验证】SoC 原型验证环境说明
【原型验证】SoC 原型验证环境说明
512 0
|
监控 JavaScript Java
开题报告|基于Springboot的课程知识库的设计与实现
开题报告|基于Springboot的课程知识库的设计与实现
276 0