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

torch张量与函数表达式写法

如何表达x y x^2y

通常一个输入是成批的,即有batch个样本为一组一起输入

input.shape为——(batch,input_length)

input_length通常为变量的长度,例:二元函数,input length=2

5个一组,二元函数,输入为(5,2)

张量input=

x1y1
x2y2
x3y3
x4y4
x5y5

提取x向量:x=input[:,0] 

提取x向量:y=input[:,1] 

之后就是随心所欲地带入表达式来

x^2y= x**2*y

torch.stack,dim是沿着哪个方向堆叠

torch.stack 是 PyTorch 中的一个函数,用于将一系列张量沿着一个新的维度堆叠起来。这个新维度是用户指定的,它将成为返回张量的一个维度。

以下是 torch.stack 的基本用法:

torch.stack(tensors, dim=0, out=None) -> Tensor
  • tensors: 一个张量序列。所有的张量都应该有相同的形状。
  • dim: 新的堆叠维度。这个维度将位于返回张量的第 dim 个位置。
  • out: (可选)输出张量。

例子

假设我们有三个形状为 (2, 3) 的张量,我们想要将它们沿着一个新的维度堆叠起来。

import torch

# 创建三个形状为 (2, 3) 的张量
t1 = torch.tensor([[1, 2, 3], [4, 5, 6]])
t2 = torch.tensor([[7, 8, 9], [10, 11, 12]])
t3 = torch.tensor([[13, 14, 15], [16, 17, 18]])

# 将它们沿着一个新的维度堆叠起来
# 这里 dim=0,意味着新维度将位于最前面
stacked = torch.stack((t1, t2, t3), dim=0)

print(stacked)

tensor([[[ 1,  2,  3],
         [ 4,  5,  6]],

        [[ 7,  8,  9],
         [10, 11, 12]],

        [[13, 14, 15],
         [16, 17, 18]]])

返回的张量 stacked 的形状是 (3, 2, 3)。这是因为我们沿着新的第一个维度(dim=0)堆叠了三个形状为 (2, 3) 的张量。

如果我们想要沿着第二个维度堆叠,可以这样操作:

# 将它们沿着第二个维度堆叠起来
stacked = torch.stack((t1, t2, t3), dim=1)

print(stacked)

输出将是:

tensor([[[ 1,  2,  3],
         [ 7,  8,  9],
         [13, 14, 15]],

        [[ 4,  5,  6],
         [10, 11, 12],
         [16, 17, 18]]])

在这个例子中,返回的张量 stacked 的形状是 (2, 3, 3),因为我们沿着第二个维度(dim=1)堆叠了三个张量。

注意,所有被堆叠的张量必须具有相同的形状,否则 torch.stack 将无法执行。

 torch里的autograd里的jacobi求法

1.x的shape为(a,b),f(x)输出为(c,)长度的向量。

autograd.functional.jacobian(f, x, create_graph=create_graph)输出形状是什么?

答案是:(c,a,b)

2.x的shape为(a,b),f(x)输出为(a,c)

autograd.functional.jacobian(f, x, create_graph=create_graph)输出形状是什么?

答案是(a,c,a,b)

import torch
from torch.autograd.functional import jacobian

# 假设 f 是一个函数,它接受一个形状为 (a, b) 的张量 x,并输出一个形状为 (c,) 的张量
def f(x):
    # (x2+y2+xy,x2+y,y3)
    fx=x[:,0],x[:,1],x[:,0]*x[:,1]#x[:,0]**2+x[:,1]**2+x[:,0]*x[:,1],x[:,0]**2+x[:,1],x[:,1]**3
    op=torch.stack(fx,dim=1)#为了让第一个维度为batch,dim取1表示横着排列
#     print("op.shape",op.shape)
#     op_sum=op.sum(dim=0)#让
#     print("op_Sum.shape",op_sum.shape)
    return op
    
# 假设 x 的形状为 (a, b)
a, b = 5, 2  # 示例维度
x = torch.randn(a, b)

# 计算 f 在 x 处的雅可比矩阵
J = jacobian(f, x)
print(x.shape)

print(f(x).shape)
# 检查雅可比矩阵的形状
print(J.shape)  # 应该输出 (c, a, b)

 输出——

torch.Size([5, 2])
torch.Size([5, 3])
torch.Size([5, 3, 5, 2])

这样比较乱,通常将不同批次的相同变量相加(dim=0de)

\sum f_1(x_i,y_i),\sum f_2(x_i,y_i),\sum f_3(x_i,y_i))得到的这个东西去求jacobi,由于相加互不影响,结果是一样的

,减少计算了。

import torch
from torch.autograd.functional import jacobian

# 假设 f 是一个函数,它接受一个形状为 (a, b) 的张量 x,并输出一个形状为 (c,) 的张量
def f(x):
    # (x2+y2+xy,x2+y,y3)
    fx=x[:,0],x[:,1],x[:,0]*x[:,1]#x[:,0]**2+x[:,1]**2+x[:,0]*x[:,1],x[:,0]**2+x[:,1],x[:,1]**3
    op=torch.stack(fx,dim=1)#为了让第一个维度为batch,dim取1表示横着排列
#     print("op.shape",op.shape)
    op_sum=op.sum(dim=0)#让不同批次同一位置的向量相加
#     print("op_Sum.shape",op_sum.shape)
    return op_sum
    
# 假设 x 的形状为 (a, b)
a, b = 5, 2  # 示例维度
x = torch.randn(a, b)

# 计算 f 在 x 处的雅可比矩阵
J = jacobian(f, x)
print(x.shape)

print(f(x).shape)
# 检查雅可比矩阵的形状
print(J.shape)  # 应该输出 (c, a, b)

输出

torch.Size([5, 2])
torch.Size([3])
torch.Size([3, 5, 2])

 f是(x,y,xy),J是如是算出的jacobi矩阵

 

 


http://www.kler.cn/a/411885.html

相关文章:

  • QT-installEventFilter
  • vim 分割窗口后,把状态栏给隐藏
  • AI时代的PPT革命:智能生成PPT工具为何备受青睐?
  • Linux—进程概念学习-03
  • 【Vue】 npm install amap-js-api-loader指南
  • 使用ENSP实现默认路由
  • 技术周刊 | 前端真的凉了吗?2024 前端趋势解读
  • 外包干了3年,技术退步明显...
  • 大数据新视界 -- Hive 查询性能优化:基于成本模型的奥秘(上)(5/ 30)
  • HTTP代理是什么,主要用来干嘛?
  • 在xml的sql的子查询中使用row_number over之后再在mapper的接口层传入Page对象实现分页功能,出现Bug
  • 鸿蒙系统的崛起:抓住机遇与挑战,创造更好的应用体验
  • Spring Cloud(Kilburn 2022.0.2版本)系列教程(五) 服务网关(SpringCloud Gateway)
  • Emgu (OpenCV)
  • 计算机网络socket编程(3)_UDP网络编程实现简单聊天室
  • 多输入多输出 | Matlab实现TCN-GRU时间卷积神经网络结合门控循环单元多输入多输出预测
  • 【机器学习chp7】SVM
  • ElasticSearch学习篇18_《检索技术核心20讲》LevelDB设计思想
  • Unity 导出 xcode 工程 并给 Info.plist 文件添加字段
  • 【Linux】Linux 内存管理机制
  • uniapp+vue2+uview2.0导航栏组件二次封装
  • [Error]无法打开源文件“graphics.h”
  • Python设计模式详解之14 —— 命令模式
  • 【41-50期】Java核心面试问题深度解析:从数据库优化到并发场景解决方案
  • 新版国标GB28181设备端EasyGBD支持GB28181-2016GB28181-2022支持ARM IPC以及Android安卓移动设备
  • 【Python爬虫五十个小案例】爬取猫眼电影Top100