Python23 使用Tensorflow实现线性回归

TensorFlow 是一个开源的软件库,用于数值计算,特别适用于大规模的机器学习。它由 Google 的研究人员和工程师在 Google Brain 团队内部开发,并在 2015 年首次发布。TensorFlow 的核心是使用数据流图来组织计算,使得它可以轻松地利用多种不同的硬件平台,从普通的个人电脑到大型服务器,甚至包括移动设备和边缘设备。
1.Tensorflow的特点和使用场景
主要特点
1.灵活性和可扩展性:TensorFlow 支持多种不同的模型和算法,用户也可以定义自己的操作,使其适应几乎任何任务的计算需求。它可以运行在多种设备上,包括桌面、服务器、移动设备等。
2.自动微分:TensorFlow 提供自动微分功能,意味着系统可以自动帮你计算导数,这一点对于实现机器学习算法中的反向传播等技术尤为重要。
3.性能优化:TensorFlow 提供了多种工具和库,支持对计算图进行优化,能够自动使用 CPU 和 GPU 等硬件加速功能。
4.易于部署:TensorFlow 模型可以轻松地部署到多种平台,用户不需要在不同设备上重新编写代码。
5.大规模机器学习支持:TensorFlow 特别适用于从中到大规模的机器学习项目。
6.生态系统和社区:TensorFlow 拥有广泛的生态系统,包括各种工具、库和社区资源,可以帮助用户从数据准备到模型训练再到部署都得到支持。
使用场景
-
图像和视频处理:如图像识别、物体检测和视频分析。
-
自然语言处理:如语言翻译、情感分析和文本分类。
-
声音识别:如语音到文本的转换。
-
预测分析:如股票市场预测、能源需求预测等。
-
强化学习:如游戏和机器人控制系统的开发。
TensorFlow 也不断在发展,增加新功能和改进,例如 TensorFlow 2.x 版本对初学者更友好,简化了很多操作,强化了即时执行(eager execution)的特性,使得交互式开发更为直观和方便。
2.Tensorflow入门
创建一个TensorFlow常量并打印:
import tensorflow as tf# 创建一个TensorFlow常量
hello = tf.constant('Hello TensorFlow')# 使用 TensorFlow 2.x 的方式打印这个常量
print(hello.numpy()) # 转换为NumPy数组格式并打印出来,输出结果中字母b前缀表示该字符串是一个字节串(bytes)而不是一个普通的字符串(str)# 输出:
'''
b'Hello TensorFlow'
'''
创建一个TensorFlow常量并打印:
import tensorflow as tf# 创建两个TensorFlow常量
a = tf.constant(40)
b = tf.constant(2)# 直接执行加法操作并打印结果
result = a + b
print(result.numpy())# 输出:
'''
42
'''
实现一个简单的线性回归模型:
线性回归模型是统计学中用来预测连续变量关系的一种方法。它假设两个或多个变量之间存在线性关系,即一个变量可以被其他一个或多个变量的线性组合来预测。线性回归的目的是找到这些变量之间最佳的直线(或超平面,取决于变量的数量)关系。
想象一下你有一组数据点,这些点在二维空间中分布(即每个数据点都有一个 x 值和一个 y 值)。线性回归模型会尝试画一条直线穿过这些点,使得所有数据点到这条直线的垂直距离之和(称为误差或残差)最小。这条直线就是所谓的“最佳拟合直线”。
在数学上,线性回归可以表示为:
其中:
-
( y ) 是因变量(目标预测值)
-
( x ) 是自变量(输入特征)
-
( w ) 是权重或系数(决定了线的斜率)
-
( b ) 是偏置或截距(决定了线的位置)
假设你想预测房屋的销售价格。这里,销售价格(( y ))可以被房屋的大小(( x ))来预测。通过收集一些历史数据(已知的房屋大小和对应的售价),你可以使用线性回归模型来找出大小和价格之间的关系。得到的模型可能会告诉你,每增加一个单位的房屋大小,价格会增加多少。
尽管线性回归是一个强大的工具,但它假设输入和输出之间是线性关系,这在现实世界中并不总是成立。当存在非线性关系时,可能需要考虑更复杂的模型,如多项式回归或其他类型的机器学习模型。
下面是一个简单的线性回归模型,用来学习并预测数据点的线性关系。
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt# 使用numpy随机生成100个数据
x_data = np.float32(np.random.rand(2, 100)) # 一个2x100的矩阵,生成了100个具有两个特征的数据点
y_data = np.dot([0.100, 0.200], x_data) + 0.300 # 是目标输出,计算公式为y_data=0.1×x1+0.2×x2+0.3# 构造一个线性模型
b = tf.Variable(tf.zeros([1])) # 一个初始值为0的标量
w = tf.Variable(tf.random.uniform([1, 2], -1.0, 1.0)) # 权重,一个1x2的矩阵,初始化为在 [-1.0, 1.0] 范围内的随机值
x_data_tensor = tf.constant(x_data)# 定义模型和损失函数
def model():return tf.matmul(w, x_data_tensor) + b # 计算的是y=wx+b,使用tf.matmul来进行矩阵乘法(w 和 x_data)def loss(): # 计算模型输出与真实输出之间的均方误差return tf.reduce_mean(tf.square(model() - y_data))# 最小化方差
optimizer = tf.optimizers.SGD(0.5) # 创建了一个梯度下降优化器,学习率为0.5# 记录损失函数值
loss_values = []
steps = []# 模拟训练:
for step in range(201):with tf.GradientTape() as tape: # 自动计算损失函数关于模型参数的梯度current_loss = loss()gradients = tape.gradient(current_loss, [w, b])optimizer.apply_gradients(zip(gradients, [w, b]))if step % 5 == 0: # 每5步记录一次loss_values.append(current_loss.numpy())steps.append(step)print(step, w.numpy(), b.numpy(), 'loss:', current_loss.numpy())# 绘制损失函数变化图
plt.figure(figsize=(10, 6))
plt.plot(steps, loss_values, label='Loss Value')
plt.xlabel('Step')
plt.ylabel('Loss')
plt.title('Loss Function Over Training Steps')
plt.legend()
plt.grid(True)
plt.show()# 输出:
'''
0 [[-0.10613185 0.5930704 ]] [0.44480804] loss: 0.21698055
5 [[-0.09899352 0.40378755]] [0.2845074] loss: 0.0077084834
10 [[-0.03101536 0.34016445]] [0.2949372] loss: 0.0032845887
15 [[0.01170078 0.2942564 ]] [0.29628983] loss: 0.0014881333
20 [[0.04059353 0.2634889 ]] [0.29748333] loss: 0.00067443977
···
190 [[0.09999996 0.20000012]] [0.29999995] loss: 1.7585933e-15
195 [[0.09999999 0.20000009]] [0.29999995] loss: 1.0924595e-15
200 [[0.09999999 0.20000009]] [0.29999995] loss: 1.0214052e-15<Figure size 1000x600 with 1 Axes>
'''

使用TensorFlow2.X计算矩阵乘法:
import tensorflow as tf
# 创建一个常量op, 返回值 'matrix1' 代表这个1x2矩阵.
matrix1=tf.constant([[3.,3.]])# 创建另外一个常量op, 返回值 'matrix2' 代表这个2x1矩阵.
matrix2 = tf.constant([[2.],[2.]])# 创建一个矩阵乘法matmul op , 把 'matrix1' 和 'matrix2' 作为输入.
# 返回值 'product' 代表矩阵乘法的结果.
product = tf.matmul(matrix1, matrix2)
matrix1
matrix2
product # 返回的是Tensorflow对象# 打印结果
print(product.numpy())
'''
<tf.Tensor: shape=(1, 2), dtype=float32, numpy=array([[3., 3.]], dtype=float32)>
<tf.Tensor: shape=(2, 1), dtype=float32, numpy=
array([[2.],[2.]], dtype=float32)>
<tf.Tensor 'MatMul_8:0' shape=(1, 1) dtype=float32>
[[12.]]
'''
以上内容总结自网络,如有帮助欢迎转发,我们下次再见!
相关文章:
Python23 使用Tensorflow实现线性回归
TensorFlow 是一个开源的软件库,用于数值计算,特别适用于大规模的机器学习。它由 Google 的研究人员和工程师在 Google Brain 团队内部开发,并在 2015 年首次发布。TensorFlow 的核心是使用数据流图来组织计算,使得它可以轻松地利…...
C++:枚举类的使用案例及场景
一、使用案例 在C中,枚举类(也称为枚举类型或enum class)是C11及以后版本中引入的一种更加强大的枚举类型。与传统的枚举(enum)相比,枚举类提供了更好的类型安全性和作用域控制。下面是一个使用枚举类的案…...
中英双语介绍美国的州:明尼苏达州(Minnesota)
中文版 明尼苏达州简介 明尼苏达州位于美国中北部,以其万湖之州的美誉、丰富的自然资源和多样化的经济结构而著称。以下是对明尼苏达州的详细介绍,包括其地理位置、人口、经济、教育、文化和主要城市。 地理位置 明尼苏达州东接威斯康星州࿰…...
Python实现万花筒效果:创造炫目的动态图案
文章目录 引言准备工作前置条件 代码实现与解析导入必要的库初始化Pygame定义绘制万花筒图案的函数主循环 完整代码 引言 万花筒效果通过反射和旋转图案创造出美丽的对称图案。在这篇博客中,我们将使用Python来实现一个动态的万花筒效果。通过利用Pygame库…...
JavaScript之深入对象,详细讲讲构造函数与常见内置构造函数
前言:哈喽,大家好,我是前端菜鸟的自我修养!今天给大家详细讲讲构造函数与常见内置构造函数,并提供具体代码帮助大家深入理解,彻底掌握!原创不易,如果能帮助到带大家,欢迎…...
PyQt5水平布局--只需5分钟带你搞懂
PyQt5水平布局(QHBoxLayout)是一种在GUI应用程序中用于组织和排列控件的布局方式。它允许开发者将控件在水平方向上从左到右依次排列,非常适合于需要并排显示控件的场景,如工具栏、水平菜单等。 import sys from PyQt5.QtWidgets…...
telegram mini app和game实现登录功能
接上一篇文章,我们在创建好telegram机器人后,开始开发小游戏或者mini App,那就避免不了登录功能。 公开链接 bot设置教程:https://lengmo714.top/6e79860b.html 参考教程参考教程,telegram已经给我们提供非常多的api,我们在获取用…...
【Python】字典练习
python期考练习 目录 1. 首都名编辑 2. 摩斯电码 3. 登录 4. 学生的姓名和年龄编辑 5. 电商 6. 学生基本信息 7. 字母数 1. 首都名 初始字典 (可复制) : d{"China":"Beijing","America":"Washington","Norway":…...
Apache POI、EasyPoi、EasyExcel
目录 编辑 (一)Apache PoI 使用 (二)EasyPoi使用 (三)EasyExcel使用 写 读 最简单的读 最简单的读的excel示例 最简单的读的对象 (一)Apache PoI 使用 (二&…...
gcop:简化 Git 提交流程的高效助手 | 一键生成 commit message
💖 大家好,我是Zeeland。Tags: 大模型创业、LangChain Top Contributor、算法工程师、Promptulate founder、Python开发者。📣 个人说明书:Zeeland📣 个人网站:https://me.zeeland.cn/📚 Github…...
TS_类型
目录 1.类型注解 2.类型检查 3.类型推断 4.类型断言 ①尖括号(<>)语法 ②as语法 5.数据类型 ①boolean ②number ③string ④undefined 和 null ⑤数组和元组 ⑥枚举 ⑦any 和void ⑧symbol ⑨Function ⑩Object 和 object 6.高…...
Linux源码阅读笔记10-进程NICE案例分析2
set_user_nice set_user_nice函数功能:设置某一进程的NICE值,其NICE值的计算是根据进程的静态优先级(task_struct->static_prio),直接通过set_user_nice函数更改进程的静态优先级。 内核源码 void set_user_nice…...
Elasticsearch实战教程: 如何在海量级数据中进行快速搜索
🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 Elasticsearch(简称ES)是一个基于Apache Lucene™的开源搜索引擎,无论在开源还是专有领…...
Python学习笔记24:进阶篇(十三)常见标准库使用之数据压缩功能模块zlib,gzip,bz2,lzma的学习使用
前言 本文是根据python官方教程中标准库模块的介绍,自己查询资料并整理,编写代码示例做出的学习笔记。 根据模块知识,一次讲解单个或者多个模块的内容。 教程链接:https://docs.python.org/zh-cn/3/tutorial/index.html 数据压缩…...
【笔记】Android Settings 应用设置菜单的界面代码介绍
简介 Settings应用中,提供多类设置菜单入口,每个菜单内又有各模块功能的实现。 那么各个模块基于Settings 基础的界面Fragment去实现UI,层层按不同业务进行封装继承实现子类: DashboardFragmentSettingsPreferenceFragment 功…...
Symfony配置管理深度解析:构建可维护项目的秘诀
Symfony是一个高度灵活且功能丰富的PHP框架,它提供了一套强大的配置管理系统,使得开发者能够轻松定制和优化应用程序的行为。本文将深入探讨Symfony中的配置管理机制,包括配置的结构、来源、加载过程以及最佳实践。 一、配置管理的重要性 在…...
视频的宣传片二维码怎么做?扫码播放视频的制作教程
现在很多的宣传片会通过扫码的方式来展示,通过将视频生成二维码之后,其他人就可以扫码来查看视频内容,从而简化获取视频的过程,提升视频传播的效率及用户查看视频的便捷性。目前,日常生活和工作中就有视频二维码的应用…...
实用的网站
前端 精简CSS格式 Font Awesome 图标库 BootCDN 加速服务 LOGO U钙网 AI AI工具集 视频下载 B站视频解析下载...
Monorepo(单体仓库)与 MultiRepo(多仓库): Monorepo 单体仓库开发策略与实践指南
🔥 个人主页:空白诗 文章目录 一、引言1. Monorepo 和 MultiRepo 简介2. 为什么选择 Monorepo? 二、Monorepo 和 MultiRepo 的区别1. 定义和概述2. 各自的优点和缺点3. 适用场景 三、Monorepo 的开发策略1. 版本控制2. 依赖管理3. 构建和发布…...
使用 PyTorch 创建的多步时间序列预测的 Encoder-Decoder 模型
Encoder-decoder 模型在序列到序列的自然语言处理任务(如语言翻译等)中提供了最先进的结果。多步时间序列预测也可以被视为一个 seq2seq 任务,可以使用 encoder-decoder 模型来处理。本文提供了一个用于解决 Kaggle 时间序列预测任务的 encod…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
