PyTorch 基础学习(3) - 张量的数学操作

下面是关于PyTorch中常见数学操作的概述和教程,包括逐点运算、比较操作、线性代数操作等,突出每个操作的重点用法和示例。

逐点操作 (Pointwise Operations)

1. torch.abs
  • 功能: 计算输入张量的每个元素的绝对值。
  • 用法: torch.abs(input)
  • 示例:
    import torch
    tensor = torch.FloatTensor([-1, -2, 3])
    result = torch.abs(tensor)
    print(result)  # 输出: tensor([1., 2., 3.])
    
2. torch.acos
  • 功能: 返回输入张量每个元素的反余弦。
  • 用法: torch.acos(input)
  • 示例:
    a = torch.tensor([0.5, -1.0, 1.0])
    result = torch.acos(a)
    print(result)  # 输出: tensor([1.0472, 3.1416, 0.0000])
    
3. torch.add
  • 功能: 将一个标量值逐元素加到输入张量上。
  • 用法: torch.add(input, value)
  • 示例:
    a = torch.randn(4)
    result = torch.add(a, 10)
    print(result)
    
4. torch.mul
  • 功能: 用标量值乘以输入张量的每个元素。
  • 用法: torch.mul(input, value)
  • 示例:
    a = torch.randn(3)
    result = torch.mul(a, 100)
    print(result)
    

线性代数操作 (Linear Algebra Operations)

1. torch.mm
  • 功能: 矩阵乘法。
  • 用法: torch.mm(mat1, mat2)
  • 示例:
    mat1 = torch.randn(2, 3)
    mat2 = torch.randn(3, 3)
    result = torch.mm(mat1, mat2)
    print(result)
    
2. torch.inverse
  • 功能: 计算方阵的逆矩阵。
  • 用法: torch.inverse(input)
  • 示例:
    x = torch.rand(3, 3)
    result = torch.inverse(x)
    print(result)
    
3. torch.svd
  • 功能: 奇异值分解。
  • 用法: torch.svd(input)
  • 示例:
    a = torch.randn(5, 3)
    u, s, v = torch.svd(a)
    print(u, s, v)
    

比较操作 (Comparison Operations)

1. torch.eq
  • 功能: 比较两个张量的元素是否相等。
  • 用法: torch.eq(input, other)
  • 示例:
    a = torch.tensor([1, 2, 3])
    b = torch.tensor([1, 1, 4])
    result = torch.eq(a, b)
    print(result)  # 输出: tensor([ True, False, False])
    
2. torch.gt
  • 功能: 比较两个张量的元素是否大于另一个。
  • 用法: torch.gt(input, other)
  • 示例:
    a = torch.tensor([1, 2, 3])
    b = torch.tensor([1, 1, 4])
    result = torch.gt(a, b)
    print(result)  # 输出: tensor([False,  True, False])
    
3. torch.max
  • 功能: 返回输入张量所有元素的最大值。
  • 用法: torch.max(input)
  • 示例:
    a = torch.randn(1, 3)
    result = torch.max(a)
    print(result)
    

下面是一个包含逐点操作、线性代数操作和比较操作的PyTorch综合应用实例。该示例展示了如何处理一个简单的线性回归任务。

应用实例:线性回归

在这个例子中,我们将使用PyTorch来进行一个简单的线性回归任务。我们将生成一些合成数据,使用线性回归模型进行拟合,并展示模型参数的更新过程。

import torch
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt# 生成合成数据
torch.manual_seed(0)  # 固定随机种子
X = torch.linspace(0, 10, 100).view(-1, 1)  # 输入特征
y = 2 * X + 1 + torch.randn(X.size()) * 2  # 线性关系加噪声# 定义线性回归模型
class LinearRegressionModel(nn.Module):def __init__(self):super(LinearRegressionModel, self).__init__()self.linear = nn.Linear(1, 1)  # 输入和输出都是1维def forward(self, x):return self.linear(x)# 初始化模型、损失函数和优化器
model = LinearRegressionModel()
criterion = nn.MSELoss()  # 均方误差损失函数
optimizer = optim.SGD(model.parameters(), lr=0.01)  # 随机梯度下降优化器# 训练模型
num_epochs = 100
for epoch in range(num_epochs):# 前向传播outputs = model(X)loss = criterion(outputs, y)# 反向传播和优化optimizer.zero_grad()loss.backward()optimizer.step()# 每10个epoch输出一次损失if (epoch+1) % 10 == 0:print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')# 获取训练后的参数
with torch.no_grad():slope = model.linear.weight.item()intercept = model.linear.bias.item()print(f'Learned parameters: Slope={slope:.4f}, Intercept={intercept:.4f}')# 可视化结果
predicted = model(X).detach().numpy()
plt.plot(X.numpy(), y.numpy(), 'ro', label='Original data')
plt.plot(X.numpy(), predicted, label='Fitted line')
plt.legend()
plt.show()

输出:
在这里插入图片描述

说明

  1. 数据生成: 我们生成了一组带有噪声的线性数据,线性关系为 (y = 2x + 1)。

  2. 模型定义: 使用nn.Linear定义了一个简单的线性回归模型。

  3. 损失函数和优化器: 使用均方误差作为损失函数,随机梯度下降作为优化器。

  4. 训练过程: 在训练过程中,我们执行前向传播计算损失,然后通过反向传播更新模型参数。

  5. 结果展示: 训练完成后,我们打印出学习到的参数,并使用matplotlib绘制原始数据和拟合直线。

总结

  • 逐点操作用于对张量中的每个元素进行相同的数学运算。
  • 线性代数操作涉及矩阵运算,如矩阵乘法、逆矩阵和分解。
  • 比较操作用于比较张量元素之间的关系。
  • PyTorch中的这些操作通常具有广播机制,允许对不同形状的张量进行运算,只要它们的形状是兼容的。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++继承(二)

一、友元函数的继承 友元函数不能被继承,就像爸爸的朋友不是你的朋友,如果要有友元函数,在子类重新定义一个。 二、静态成员的继承 静态成员的继承仍然是那个成员,普通成员的继承是不同的。 父类的静态成员属于当前类&#xf…

20240813 每日AI必读资讯

Flux生成网红博主因太逼真爆火!有人用Claude写代码识破“AI美女” - Flux生成的情侣合照逼真程度达到恐怖级别,挑战人类视觉辨识能力。 - 网友发现Flux生成的照片几乎完美,但仍有细微瑕疵可供识别。 - 有人利用Flux等工具制作逼真的YouTub…

[upload]-[GXYCTF2019]BabyUpload1-笔记

尝试上传.htaccess和图片和一句话木马提示 php文件提示 响应头可以看到 构造一句话图片木马如下&#xff1a; <script languagephp>eval($_POST[cmd]);</script> 上传成功 必须增加文件夹下jpg后缀解析php .htaccess如下 <FilesMatch "jpg">Set…

浙大数据结构慕课课后题(06-图2 Saving James Bond - Easy Version)(拯救007)

题目要求&#xff1a; This time let us consider the situation in the movie "Live and Let Die" in which James Bond, the worlds most famous spy, was captured by a group of drug dealers. He was sent to a small piece of land at the center of a lake fi…

LabVIEW中CANopen 读取程序解读

这段程序用于创建 CANopen 接口&#xff0c;并读取 CANopen CAN 帧消息。以下是详细的解读&#xff1a; 左侧部分 node-ID (U8): 指定节点 ID&#xff0c;用于标识 CANopen 网络中的设备。CANopen interface (U32): 指定 CANopen 接口。baud rate (U32): 设置波特率&#xff0…

vulnhub系列:sp eric

vulnhub系列&#xff1a;sp eric 靶机下载 一、信息收集 nmap扫描存活&#xff0c;根据mac地址寻找IP nmap 192.168.23.0/24nmap扫描端口&#xff0c;开放端口&#xff1a;22、80 nmap 192.168.23.189 -p- -A -sV -Pndirb 扫描目录&#xff0c;.git 源码&#xff0c;admin…

向上or向下调整建堆 的时间复杂度的本质区别的讲解

知识点&#xff1a;&#xff08;N代表节点数&#xff0c;h代表高度&#xff09; 1&#xff1a;高度为h的满二叉树节点个数N为 2^&#xff08;h&#xff09;-1 即N 2^&#xff08;h&#xff09;-1 2&#xff1a;所以h log&#xff08;N1&#xff09; 一&#xff1a;向上…

C++STL详解(四)——vector类的具体实现

在上篇文章中&#xff0c;我们已经学习了vector的具体接口使用方法&#xff0c;在本篇文章中&#xff0c;我们将学习实现一个vector容器。 目录 一.vector各函数接口总览 二.vector当中的私有成员 三.默认成员函数 3.1构造函数 3.1.1构造函数1 3.1.2构造函数2 3.1.3构造…

百数移动端重大更新:全面优化,用户体验再升级!

本次发布的优化更新的功能&#xff0c;主要是为了提升用户的移动端使用体验。此次改版不仅优化了控件样式&#xff0c;提升视觉与交互体验&#xff0c;还在子表单功能上实现了重大突破&#xff0c;如新增复制、插入行功能等。 同时&#xff0c;新增功能——数据加载&#xff0…

Python之简单了解pylab绘图工具和汇编语言

《Python入门经典以解决计算问题为导向的Python编程实践》89-93页的笔记。 用pylab对数据绘图最小的通用计算 用pylab对数据绘图 PyLab是Matplotlib面向对象绘图库的过程界面。Matplotlib是整个软件包&#xff1b; matplotlib.pyplot是Matplotlib中的一个模块&#xff1b;而P…

【物联网】(蓝牙篇)微信小程序ios如何自动打开蓝牙

微信小程序打开蓝牙的便捷之道——微信小程序ios如何自动打开蓝牙 随着智能手机蓝牙技术和物联网产品的普及&#xff0c;很多人在使用微信小程序时&#xff0c;都希望能够更便捷地打开蓝牙功能。 在iOS系统上&#xff0c;由于其封闭性和权限控制严格&#xff0c;使得自动打开蓝…

扩散模型理论与公式推导——详细过程速览与理解加深

参考&#xff1a; [1] Ho J, Jain A, Abbeel P. Denoising diffusion probabilistic models[J]. Advances in neural information processing systems, 2020, 33: 6840-6851. [2] 扩散模型/Diffusion Model原理讲解_哔哩哔哩_bilibili [3] 扩散模型公式推导_扩散模型数学推导-C…

10、java程序流程控制之二:分支语句(switch-case结构)、循环结构(for循环)(经典案例)

java程序流程控制之二&#xff1a; Ⅰ、分支语句&#xff1a;switch-case1、switch-case 分支结构&#xff1a;其一、描述&#xff1a;其二、代码为&#xff1a;其三、截图为&#xff1a; 2、switch-case 分支结构的案例1&#xff1a;判断是否合格其一、描述&#xff1a;其二、…

Docker数据管理和网络管理

文章目录 一、Docker数据管理Docker容器的分层哪些数据需要持久化容器数据持久保存方式数据卷&#xff08;data volume&#xff09;数据卷的使用场景数据卷的特点数据卷使用方法实际例子 二、网络管理Docker安装完成后默认的网络设置创建容器后的网络配置修改默认网络设置容器名…

“南禾”女士包网站的设计与实现----附源码17160

摘 要 随着社会经济的发展和人们生活水平的提高&#xff0c;女士包市场逐渐成为一个庞大的产业。女性消费者对于时尚、品质和个性化的追求&#xff0c;对于高品质、款式新颖的女士包需求不断增加。南禾作为中高端女士包品牌&#xff0c;为抓住了这一市场需求&#xff0c;为女性…

再见,Midjourney | FLUX 彻底改变了 AI 图像游戏

Flux 刚发布一周&#xff0c;大家都疯了&#xff01; 因为真的是分不清是AI还是真实啊&#x1f3f4;‍☠️ Flux生成 Flux生成 FLUX 彻底改变了 AI 图像游戏。 02 黑深林 Black Forest Labs由Stable Diffusion模型的原班人马创立&#xff0c;旨在开发并开源高质量的图像和…

AI技术加速落地 港科广联手思谋打开智能缺陷检测新纪元

AI 技术应用落地的元年&#xff0c;工业是主战场&#xff0c;尤其是工业缺陷检测。 在“生产制造-缺陷检测-工艺优化-生产制造”的智能制造闭环链条中&#xff0c;基于AI的智能缺陷检测扮演着“把关者”的角色。但这个把关者长期以来却缺少一个称手的工具——样本量大、精度高…

【Cadence22】将别人发的原理图和PCB库修改为自己的库,进而继续制图

【转载】Cadence Design Entry HDL 使用教程 【Cadence01】Cadence PCB Edit相对延迟与绝对延迟的显示问题 【Cadence02】Allegro引脚焊盘Pin设置为透明 【Cadence03】cadence不小心删掉钢网层怎么办&#xff1f; 【Cadence04】一般情况下Allegro PCB设计时的约束规则设置&a…

Firefox滚动条在Win10和Win11下表现不一致问题?

文章目录 前言总结解决方法 前言 最近在写页面的时候发现一个非常有意思的事。Firefox滚动条在Win10和Win11下表现居然不一致。在网上几经查找资料&#xff0c; 终于找到原因所在。总结成下面的文章&#xff0c;加深印象也防止下次遇到。 总结 参考文章&#xff1a; Firefox…

云快充协议1.5版本的充电桩系统软件

介绍 小程序端&#xff1a;城市切换、附近电站、电桩详情页、扫码充电、充电中动态展示、订单支付、个人中心、会员充值、充值赠送、联系客服&#xff1b; 管理后台&#xff1a;充电数据看板、会员管理、订单管理、充值管理、场站运营、文章管理、财务管理、意见反馈、管理员管…