当前位置: 首页 > news >正文

【PyTorch】张量操作与线性回归

张量的操作

Tensor Operation

拼接与切分

1.1 torch.cat()

torch.cat(tensors, dim=0, out=None)

功能:将张量按维度dim进行拼接

  • tensors:张量序列
  • dim:要拼接的维度

1.2 torch.stacok()

torch.stack(tensors, dim=0, out=None)

功能:在新创建的维度dim上进行拼接

  • tensors:张量序列
  • 要拼接的维度

1.3 torch.chunk()

torch.chunk(input, chunks, dim=0)

功能:将张量按维度dim进行平均切分
返回值:张量列表
注意事项:若不能整除,最后一份张量小于其他张量

  • input:要切分的张量
  • chunks:要切分的份数
  • dim:要切分的维度

1.4 torch.split()

torch.chunk(input, chunks, dim=0)

功能:将张量按维度dim进行切分
返回值:张量列表

  • tensor:要切分的张量
  • split_size_or_sections:为int时,表示每一份的长度;为list时,按list元素切分
  • dim:要切分的维度

索引

2.1 torch.index_select()

torch.index_select(input, dim, index, out=None)

功能:在维度dim上,按index索引数据返回值(依index索引数据拼接的张量)

  • input:要索引的张量
  • dim:要索引的维度
  • index:要索引数据的序号

2.2 torch.masked_select()

torch.masked_select(input, mask, out=None)

功能:按mask中的True进行索引
返回值:一维张量

  • input:要索引的张量
  • mask:与input同形状的布尔类型张量

变换

3.1 torch.reshape()

torch.reshape(input, shape)

功能:变换张量形状
注意事项:当张量在内存中是连续时,新张量与input共享数据内存(改变一个变量时,另一个变量也会被改变)。

  • input:要变换的张量
  • shape:新张量的形状

3.2 torch.transpose()

torch.transpose(input, dim0, dim1)

功能:交换张量的两个维度

  • input:要变换的张量
  • dim0:要交换的维度
  • dim1:要交换的维度

3.3 torch.t()

功能:2维张量转置,对矩阵而言,等价于

torch.transpose(input, 0, 1)

3.4 torch.squeeze()

torch.squeeze(input, dim=None, out=None)

功能:压缩长度为1的维度(轴)

  • dim:若为None,移除所有长度为1 的轴;若指定维度,当且仅当该轴长度为1时,可以被移除

3.5 torch.unsqueeze()

torch.unsqueeze(input, dim)

功能:依据dim扩展维度

  • dim:扩展的维度

张量的数学运算

Tensor Math Operations

加减乘除

torch.add()
torch.addcidv()
torch.addcmul()
torch.sub()
torch.div()
torch.mul()

对数、指数、幂函数

torch.log(input, out=None)
torch.log10(input, out=None)
torch.log2(input, out=None)
torch.exp(input, out=None)
torch.pow()

三角函数

torch.abs(input, out=None)
torch.acos(input, out=None)
torch.cosh(input, out=None)
torch.cos(input, out=None)
torch.asin(input, out=None)
torch.atan(input, out=None)
torch.atan2(input, other, out=None)

实例

torch.add()

torch.add(input, other, out=None)
torch.add(input, other, *, alpha=1, out=None)

功能:逐元素计算 input + alpha × other

  • input:第一个张量
  • alpha:乘项因子
  • other:第二个张量

Pythonic:
torch.addcdiv()

torch.addcdiv(input, tensor1, tensor2, *, value=1, out=None)

在这里插入图片描述

torch.addcmul()

torch.addcmul(input, tensor1, tensor2, *, value=1, out=None)

在这里插入图片描述

线性回归

Linear Regression

基本概念

线性回归是分析一个变量与另外一(多)个变量之间关系的方法。

因变量:y
自变量:x
关系:线性

y = wx + b

分析:求解w,b

求解步骤

  1. 确定模型
    Model:y = wx + b
  2. 选择损失函数
    MSE
    在这里插入图片描述
  3. 求解梯度并更新w,b
    w = w - LR * w.grad
    b = b - LR * w.grad

完整代码

import torch
import matplotlib.pyplot as plt
torch.manual_seed(10)lr = 0.05  # 学习率# 创建训练数据
x = torch.rand(20, 1) * 10  # x data (tensor), shape=(20, 1)
# torch.randn(20, 1) 用于添加噪声
y = 2*x + (5 + torch.randn(20, 1))  # y data (tensor), shape=(20, 1)# 构建线性回归参数
w = torch.randn((1), requires_grad=True) # 设置梯度求解为 true
b = torch.zeros((1), requires_grad=True) # 设置梯度求解为 true# 迭代训练 1000 次
for iteration in range(1000):# 前向传播,计算预测值wx = torch.mul(w, x)y_pred = torch.add(wx, b)# 计算 MSE lossloss = (0.5 * (y - y_pred) ** 2).mean()# 反向传播loss.backward()# 更新参数b.data.sub_(lr * b.grad)w.data.sub_(lr * w.grad)# 每次更新参数之后,都要清零张量的梯度w.grad.zero_()b.grad.zero_()# 绘图,每隔 20 次重新绘制直线if iteration % 20 == 0:plt.scatter(x.data.numpy(), y.data.numpy())plt.plot(x.data.numpy(), y_pred.data.numpy(), 'r-', lw=5)plt.text(2, 20, 'Loss=%.4f' % loss.data.numpy(), fontdict={'size': 20, 'color':  'red'})plt.xlim(1.5, 10)plt.ylim(8, 28)plt.title("Iteration: {}\nw: {} b: {}".format(iteration, w.data.numpy(), b.data.numpy()))plt.pause(0.5)# 如果 MSE 小于 1,则停止训练if loss.data.numpy() < 1:break

参考链接

PyTorch 学习笔记

相关文章:

【PyTorch】张量操作与线性回归

张量的操作 Tensor Operation 拼接与切分 1.1 torch.cat() torch.cat(tensors, dim0, outNone)功能&#xff1a;将张量按维度dim进行拼接 tensors&#xff1a;张量序列dim&#xff1a;要拼接的维度 1.2 torch.stacok() torch.stack(tensors, dim0, outNone)功能&#xf…...

情感类智能体——你的微信女神

智能体名称&#xff1a;你的微信女神 链接&#xff1a;文心智能体平台AgentBuilder | 想象即现实 (baidu.com)https://agents.baidu.com/agent/preview/RulbsUjIGj4wsinydlBH7AR3NQKFungt 简介 “你的微信女神”是一个直率的智能体&#xff0c;她用犀利而真实的言辞帮助用户…...

基于SpringBoot+Vue+MySQL的养老院管理系统

系统展示 管理员界面 家属界面 系统背景 随着全球人口老龄化的加速&#xff0c;养老院管理面临着前所未有的挑战。传统管理方式存在信息不透明、效率低下、资源分配不均等问题&#xff0c;难以满足日益增长的养老服务需求。因此&#xff0c;开发一套智能化、高效的养老院管理系…...

大数据Flink(一百二十二):阿里云Flink MySQL连接器介绍

文章目录 阿里云Flink MySQL连接器介绍 一、特色功能 二、​​​​​​​语法结构 三、​​​​​​​​​​​​​​WITH参数 阿里云Flink MySQL连接器介绍 阿里云提供了MySQL连接器&#xff0c;其作为源表时&#xff0c;扮演的就是flink cdc的角色。 一、特色功能 MySQ…...

FutureTask源码分析

Thread类的run方法返回值类型是void&#xff0c;因此我们无法直接通过Thread类获取线程执行结果。如果要获取线程执行结果就需要使用FutureTask。用法如下&#xff1a; class CallableImpl implements Callable{Overridepublic Object call() throws Exception {//do somethin…...

Highcharts甘特图基本用法(highcharts-gantt.js)

参考官方文档&#xff1a; https://www.highcharts.com/docs/gantt/getting-started-gantt https://www.highcharts.com/demo/gantt/project-management https://www.hcharts.cn/demo/gantt 链接在下面按需引入 https://code.highcharts.com/gantt/highcharts-gantt.js htt…...

【Linux庖丁解牛】—Linux基本指令(上)!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a; Linux庖丁解牛 &#x1f516;克心守己&#xff0c;律己则安 目录 1、 pwd命令 2、ls 指令 3、cd 指令 4、Linux下的根目录 5、touch指令 6、 stat指令 7、mkdi…...

node.js 中的进程和线程工作原理

本文所有的代码均基于 node.js 14 LTS 版本分析 概念 进程是对正在运行中的程序的一个抽象&#xff0c;是系统进行资源分配和调度的基本单位&#xff0c;操作系统的其他所有内容都是围绕着进程展开的 线程是操作系统能够进行运算调度的最小单位&#xff0c;其是进程中的一个执…...

Qt/C++ TCP调试助手V1.1 新增图像传输与接收功能(附发布版下载链接)

发布版本链接 通过百度网盘分享的文件&#xff1a;TCP调试助手V1.zip&#xff08;含客户端与服务器&#xff09; 链接&#xff1a;https://pan.baidu.com/s/14LTRPChPhYdwp_s6KeyBiA?pwdcedu 提取码&#xff1a;cedu 基于Qt/C实现了一款功能丰富的TCP服务器与客户端调试助手…...

DNS解析流程

DNS解析流程&#xff1a; 浏览器DNS缓存&#xff1a; 当我们在浏览器中访问某个域名时&#xff0c;浏览器首先会检查自己内部的DNS缓存&#xff0c;看是否有该域名的对应IP地址。如果有&#xff0c;直接使用缓存中的IP地址&#xff0c;跳过后续步骤。 本地系统DNS缓存&#xf…...

[PTA]7-1 藏头诗

[PTA]7-1 藏头诗 本题要求编写一个解密藏头诗的程序。 注&#xff1a;在 2022 年 7 月 14 日 16 点 50 分以后&#xff0c;该题数据修改为 UTF-8 编码。 输入格式&#xff1a; 输入为一首中文藏头诗&#xff0c;一共四句&#xff0c;每句一行。注意&#xff1a;一个汉字占三…...

每日OJ题_牛客_WY22 Fibonacci数列(斐波那契)

目录 牛客_WY22 Fibonacci数列&#xff08;斐波那契&#xff09; 解析代码 牛客_WY22 Fibonacci数列&#xff08;斐波那契&#xff09; Fibonacci数列_牛客题霸_牛客网 解析代码 求斐波那契数列的过程中&#xff0c;判断⼀下&#xff1a;何时 n 会在两个 fib 数之间。 #in…...

SQL 查询语句汇总

在软件开发和数据分析中&#xff0c;SQL&#xff08;结构化查询语言&#xff09;是与数据库交互的重要工具。为了更好地理解 SQL 查询语句的使用&#xff0c;本文将设计一个简单的数据库&#xff0c;包括几张表&#xff0c;并通过这些表展示各种 SQL 查询的应用。 一、背景信息…...

封装一个语言识别文字的方法

语音识别 需求&#xff1a; 参考官方文档&#xff0c;整合语音识别apicallback 的写法改为 Promise 的版本 在startRecord中&#xff1a; 参考文档实例化-开启转换将录制的内容传递给录音识别回调函数中的 Log&#xff0c;改为 Logger 在closeRecord&#xff1a; 结束识别…...

解决 iOS App Tracking Transparency 权限问题

解决 iOS App Tracking Transparency 权限问题 在 iOS 14 及更高版本中&#xff0c;Apple 引入了 App Tracking Transparency (ATT) 框架&#xff0c;要求应用在跟踪用户之前必须获得用户的明确许可。这通常涉及到访问用户的广告标识符&#xff08;IDFA&#xff09;。如果没有…...

ClickHouse 的底层架构和原理

ClickHouse 是一个用于实时分析和处理大规模数据的列式数据库&#xff0c;其设计目标是高效地处理海量数据的查询需求。它特别适合 OLAP&#xff08;Online Analytical Processing&#xff09;场景&#xff0c;能够在不依赖复杂的索引结构的情况下&#xff0c;实现极快的查询速…...

rtmp推流

获取摄像头名称 打开命令行工具&#xff0c;运行以下命令以列出所有可用的视频设备&#xff1a; ffmpeg -f dshow -list_devices true -i dummy查找输出中的“Video devices”部分&#xff0c;记录下你的摄像头名称。 构建推流命令 ffmpeg -f dshow -i video"摄像头名称…...

【数据库】死锁排查方式

定位 查是否锁表 select username,lockwait,status,machine,program from v$session where sid in (select session_id from v$locked_object); 查锁表sql select sql_text from v$sql where hash_value in (select sql_hash_value from v$session where sid in (select s…...

去耦合的一些建议

尽量少用全局变量&#xff0c;以减少状态共享和潜在的副作用。 模块化设计&#xff1a;将代码分成小模块&#xff0c;每个模块独立实现特定功能&#xff0c;减少模块之间的相互依赖。 封装&#xff1a;将数据和操作封装在类中&#xff0c;控制对内部状态的访问&#xff0c;避…...

SpringBoot+Thymeleaf图书管理系统

一、项目介绍 > 这是一个基于SpringBootThymeleaf实现的图书管理系统。 > 包含图书管理、作者管理、分类管理、出版社管理等功能。 > 界面简洁美观&#xff0c;代码结构清晰&#xff0c;完成度比较高&#xff0c;适用于JAVA初学者作为参考项目。 二、项目演示 三…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...