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…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...