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

开启IT世界的第一步:高考新生的暑期学习指南
目录 前言 了解IT领域 学习编程语言 实践项目 学习资源 阅读专业书籍 培养良好的学习习惯 结语 最后 - 投票 前言 七月的钟声敲响,各省的高考分数已揭晓,意味着一段紧张而又充满奋斗的旅程画上了句号。然而,高考的结束并不意味…...

软考系统架构师高效备考方法论
软考系统架构师高效备考方法论 本章总结的备考方法论也是希望能帮助更多的小伙伴高效的备考最终通过考试,这种考试个人感觉是尽量一次性考过, 要不然老拖着,虽然每年可以考两次,5月和11月,两次考试间隔5个月时间&#…...

【neo4j图数据库】入门实践篇
探索数据之间的奥秘:Neo4j图数据库引领新纪元 在数字化浪潮汹涌的今天,数据已成为企业最宝贵的资产之一。然而,随着数据量的爆炸性增长和数据关系的日益复杂,传统的关系型数据库在处理诸如社交网络、推荐系统、生物信息学等高度互…...

【TS】TypeScript 原始数据类型深度解析
🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 💫个人格言: "如无必要,勿增实体" 文章目录 TypeScript 原始数据类型深度解析一、引言二、基础原始数据类型2.1 boolean2.2 …...

怎么样调整分类的阈值
调整分类模型的阈值是改变模型对正负类的预测标准的一种方法,常用于提高精确率、召回率或者其他性能指标。以下是如何调整分类阈值的步骤和方法: PS:阈值是针对预测概率(表示样本属于某个特定类别的可能性)来说的 调…...

java+mysql教师管理系统
完整源码地址 教师信息管理系统使用命令行交互的方式及数据库连接实现教师信息管理系统,该系统旨在实现教师信息的管理,并根据需要进行教师信息展示。该软件的功能有如下功能 (1)基本信息管理(教师号、姓名、性别、出生年月、职称、学历、学位、教师类型…...

PDF文档如何统计字数,统计PDF文档字数的方法有哪些?
在平时使用pdf阅读或者是处理文档的时候,常常需要统计文档的字数。pdf在查看文字时其实很简单。 PDF文档是一种常见的电子文档格式,如果需要对PDF文档中的字数进行统计,可以使用以下方法: Adobe Acrobat DC:Adobe Ac…...

在Python asyncio中如何识别协程是否被block了
现在asyncio在Python中的使用越来越广泛了,但是很多人对于协程(corotine)的一些使用方式还不太熟悉。在这篇文章中,我将会介绍如何识别协程是否被block了,并以常用的HTTP网络库requests/httpx为例来说明如何避免协程被block的问题。 为什么协程会被block 在Python中,可…...

Hyper-V虚拟机固定IP地址(手把手教设置)
链接虚拟机修改网络配置文件 输入指令 sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0 然后 输入 按 i 键 再按回车 (enter) 进入编辑模式 修改配置(这几项)其中 IPADDR 就是你想给虚拟机固定的 IP 地址 多台的话只需要修改这个IP 就行其他不变 BOOTPROTO=static…...

以 Vue 3 项目为例,多个请求下如何全局封装 Loading 的展示与关闭?其中大有学问!
大家好,我是CodeQi! 项目开发中,Loading 的展示与关闭是非常关键的用户体验设计。 当我们的应用需要发起多个异步请求时,如何有效地管理全局 Loading 状态,保证用户在等待数据加载时能有明确的反馈,这是一个值得深入探讨的问题。 本文将以 Vue 3 项目为例,详细讲解如…...