Python23 使用Tensorflow实现线性回归

news2025/1/12 23:06:09

图片

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.]]
'''

以上内容总结自网络,如有帮助欢迎转发,我们下次再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1888758.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

​​​​Linux LVS 负载均衡群集

在业务量达到一定量的时候&#xff0c;往往单机的服务是会出现瓶颈的。此时最常见的方式就是通过负载均衡来进行横向扩展。其中我们最常用的软件就是 Nginx。通过其反向代理的能力能够轻松实现负载均衡&#xff0c;当有服务出现异常&#xff0c;也能够自动剔除。但是负载均衡服…

GB28181百万路视频接入

重定向 国标28181在设计时就考虑了&#xff0c;省区县多层级接入&#xff0c;接入上限就考虑了呼叫重定向&#xff1a; IETF RFC3261 规定的SIP逻辑实体,负责规划SIP呼叫路由。它将获得的呼叫下一跳地址信息 告诉呼叫方,以使呼叫方根据此地址直接向下一跳发出请求,此后重定向服…

在 WebGPU 与 Vulkan 之间做出正确的选择(Making the Right Choice between WebGPU vs Vulkan)

在 WebGPU 与 Vulkan 之间做出正确的选择&#xff08;Making the Right Choice between WebGPU vs Vulkan&#xff09; WebGPU 和 Vulkan 之间的主要区别WebGPU 是什么&#xff1f;它适合谁使用&#xff1f;Vulkan 是什么&#xff1f;它适合谁使用&#xff1f;WebGPU 和 Vulkan…

Vue3Echarts实用的双层饼图

在公司客户端项目开发中&#xff0c;用来区分已处理与未处理两个状态的双层饼图&#xff0c;以下是项目案例&#xff1a; 下载Echarts //npm npm install echarts --save//淘宝镜像cnpm(安装速度快) cnpm install echarts --save//yarn yarn add echarts 代码示例 <temp…

llm学习-3(向量数据库的使用)

1&#xff1a;数据读取和加载 接着上面的常规操作 加载环境变量---》获取所有路径---》加载文档---》切分文档 代码如下&#xff1a; import os from dotenv import load_dotenv, find_dotenvload_dotenv(find_dotenv()) # 获取folder_path下所有文件路径&#xff0c;储存在…

冒泡排序写法

正宗的冒泡排序写法&#xff1a; public class BubbleSort {public static void main(String[] args) {int[] a {4,6,5,24,3,7,1};//初始化一个最大角标变量int n a.length-1;//循环轮次for (int i0;i<n;i){//从后向前开始&#xff0c;相邻元素比较大小&#xff0c;小的元…

python学习-tuple及str

为什么需要元组 定义元组 元组的相关操作 元组的相关操作 - 注意事项 元组的特点 字符串 字符串的下标&#xff08;索引&#xff09; 同元组一样&#xff0c;字符串是一个&#xff1a;无法修改的数据容器。 如果必须要修改字符串&#xff0c;只能得到一个新的字符串&#xff…

基于SpringBoot高校体育运动会管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

学习aurora64/66b.20240703

简介 The AMD LogiCORE™IP Aurora 64B/66B core是一种可扩展的轻量级高数据速率链路层协议&#xff0c;用于高速串行通信。该协议是开放的&#xff0c;可以使用AMD设备技术实现。 Aurora 64B/66B是一种轻量级的串行通信协议&#xff0c;适用于多千兆位链路 (如下图所示)。它…

【JS】过滤数组中空值——arr.filter(Boolean)

前言&#xff1a;过滤数组中的空值&#xff0c;包括 &#xff08;undefined、null、“”、0、false、NaN&#xff09; Boolean函数可以将一个值转换为布尔值&#xff0c;空值会被转换为false&#xff0c;非空值会被转换为true 方法&#xff1a; const arr [1, 2, ""…

基于tensorflow2的目标检测完整实现过程

序言 虽然tf1仍然在维护&#xff0c;但tf2毕竟是主流&#xff0c;如果不是项目有明确要求&#xff0c;建议直接选择tf2。本文以tf2为例展开&#xff0c;总结从环境准备到使用自己的数据和tensorflow预训练模型进行快速训练和调用。对tensorflow和目标检测算法有深入了解的&…

足底筋膜炎怎么治疗最好的办法

足底筋膜炎是一种较为常见的足部疾病&#xff0c;其发生原因多样且复杂。以下是引起足底筋膜炎的主要原因&#xff0c;归纳如下&#xff1a; 1. 外部因素 &#xff08;1&#xff09;长期受凉&#xff1a;长期处于寒冷环境中&#xff0c;会导致足部血管收缩&#xff0c;进而引…

推荐8款超实用的ComfyUI绘画插件,帮助我们的AI绘画质量和效率提升几个档次!

前言 大家在使用SD绘画过程中&#xff0c;想必见识到了插件的强大功能&#xff0c;本身纯净版的SD界面是相对简洁的&#xff0c;但是搭配了各种插件后&#xff0c;界面标签栏会增加很多&#xff0c;相应的功能也增加了。 从简单的中文界面翻译插件&#xff0c;到强大的contro…

二刷算法训练营Day50 | 动态规划(11/17)

目录 详细布置&#xff1a; 1. 309. 买卖股票的最佳时机含冷冻期 2. 714. 买卖股票的最佳时机含手续费 详细布置&#xff1a; 1. 309. 买卖股票的最佳时机含冷冻期 给定一个整数数组prices&#xff0c;其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计算出最大…

【Git】版本控制器的方式:SVN集中式版本控制工具和Git分布式版本控制工具

一、应用场景 二、版本控制器的方式 三、SVN 集中式版本控制工具 四、Git 分布式版本控制工具 五、Git工作流程 一、应用场景 Git 在开发过程中提供了多种应用场景&#xff0c;帮助开发团队高效地管理代码、协同工作&#xff0c;并保证代码质量。以下是一些具体应用场景和相应…

“不喝鸡汤 不诉离殇”华火电燃灶用实力引领烹饪灶具发展

在这个快节奏的时代&#xff0c;我们常常被各种厨房电器的鸡汤所包围&#xff0c;并悄悄的告诉我们厨房生活是美好与温暖的&#xff0c;但面对现实中的挑战与困难时&#xff0c;常常表现出选择性失明&#xff1b;那些隐藏在传统厨房烹饪环境下的危机&#xff0c;就像是慢性的毒…

HCM智能人力资源系统存在命令执行漏洞Getshell

0x01 阅读须知 技术文章仅供参考&#xff0c;此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成…

GitCode见证:华为云DevUI如何定义下一代前端开发

在当今快速发展的数字时代&#xff0c;前端开发已成为企业数字化转型的关键一环。随着用户对交互体验的期待不断增长&#xff0c;拥有一个强大、灵活且易于使用的前端解决方案变得至关重要。 DevUI的诞生&#xff0c;源于华为对研发工具的深入理解和长期积累&#xff0c;作为一…

vue中自定义设置多语言,并且运行js脚本自动生成多语言文件

在项目中需要进行多个国家语言的切换时&#xff0c;可以用到下面方法其中一个 一、自定义设置多语言 方法一: 可以自己编写一个设置多语言文件 在项目新建js文件&#xff0c;命名为&#xff1a;language.js&#xff0c;代码如下 // language.js 文档 let languagePage {CN…

实验室必备神器:PFA气体装置,精准控制每一丝气体!

PFA气体吸收装置是一种高效的气体处理设备&#xff0c;主要用于捕获、存储和转移各种气体样本&#xff0c;特别是在需要高纯度气体的应用场合中表现出色。以下是关于PFA气体吸收装置的详细介绍&#xff1a; 一、特点与优势 1. 高效吸收&#xff1a;采用先进的物理和化学吸收技术…