11.21 深度学习-tensor常见操作
import torch
from PIL import Image
from torchvision import transforms
# 获取元素值 tensor.item() 返回一个数值 只能是tensor里面有一个数字的
# 我们可以把单个元素tensor转换为Python数值,这是非常常用的操作
# tensor 里面超过了1个数字就不行
def get_item():
t1=torch.tensor(1)
t2=torch.tensor([[[100]]])
x=t1.item()
print(x)
x=t2.item()
print(x)
pass
# 元素值四则运算
def compute():
# 加减乘除
torch.manual_seed(666)
t1=torch.rand(3,3)
# 末尾有下划线的直接是改变原来的数据
# 对tensor里面的每个元素都 进行 四则运算操作
# + add
t1_add=t1.add(1)
t1.add_(1)
# - sub
t1_sub=t1.sub(-1)
t1.sub_(1)
# * / 次方同理 mul div pow
# 也可以通过运算符号来进行 tensor类里面有魔术方法实现了 四则 次方 // % 都可以 这个没有对原来数据进行改变的
t2=t1+10
t3=t1**2
print(t3)
pass
def hadamard():
# 两个tensor相同位置的元素相乘 两个tensor形状要一样
# 阿达玛积指的是矩阵对应位置的元素相乘,可以使用mul函数或者*来实现 其实就是上面的乘法换成了 两个tensor 相乘
data1 = torch.tensor([[1, 2, 3], [4, 5, 6]])
data2 = torch.tensor([[2, 3, 4], [2, 2, 3]])
print(data1 * data2)
print(data1.mul(data2))
pass
# 点积
def dotProduct():
# 就是矩阵乘法的意思 第一个矩阵列数 和第二个矩阵的行数要相同 结果矩阵的形状为(第一个矩阵的行,第二个矩阵的列)
data1 = torch.tensor([
[1, 2, 3],
[4, 5, 6]
])
data2 = torch.tensor([
[3, 2],
[2, 3],
[5, 3]
])
# 使用@或者matmul完成Tensor的乘法。 @ 是点积的符号 a@b matmul和 mm是tensor的方法 mm只能用于二维的矩阵乘法 就是只有行列的 一般都是二维或者三维 乘法没有交换律注意顺序
# mm方法也可以用于矩阵相乘 但是只能用于2维矩阵即:$$m*k$$和$$k*n$$ 得到$$m*n$$ 的矩阵
res1=data1 @ data2
res2=data1.matmul(data2)
res3=data1.mm(data2)
pass
# 索引操作
def index():
torch.manual_seed(666)
t1=torch.rand(3,5,5)
# 跟np数组嵌套的索引差不多 就是嵌套列表的取法 套几个索引
t1[1]
t1[1,1]
t1[1,1,1]
# 取范围 第一维取 0 和1 取出来的矩阵在取 1
t1[0:2,1]
t1[0:2,1:3]
t1[[1,2]] # 取第一维的1和3 在一个维度上取多个的时候传个矩阵进去 这个不会降维的 取出来就相当于重新组了一下 不是切片
t1[[1,2],[1,1]] # 对应 矩阵取出来 [1,1] [2,1]
# 也可以进行布尔运算 跟np差不多 返回的是一个布尔矩阵 布尔矩阵可以拿去 返回为ture的元素 返回出来变为1维的了
x2=t1>0.5
# print(x2)
# print(t1[x2])
# print(t1[t1>0.5])
# 行级别的条件索引
t2=torch.rand(5,5)
x3=t2[:,1]>6 # 所有行的第一列大于6的 前面是行范围 后面是范围 对应一维范围 二维范围 三维范围。。。。 最后一维范围只能是一个数 对最后一维进行判断或者赋值
t1[0:2,0:2,1]>0.5
t2[x3]
# 索引也可以拿来赋值 就是修改数据 取索引然后赋值
t2[:,:]=6
print(t2)
pass
# 张量的拼接 torch的方法 返回一个新的tensor
# 在 PyTorch 中,cat 和 stack 是两个用于拼接张量的常用操作,但它们的使用方式和结果略有不同:
# - **cat**:在现有维度上拼接,不会增加新维度。
# - **stack**:在新维度上堆叠,会增加一个维度。
def splice():
torch.manual_seed(666)
t1=torch.rand(3,3)
t2=torch.rand(3,3)
# torch.cat(concatenate 的缩写)用于沿现有维度拼接张量。换句话说,它在现有的维度上将多个张量连接在一起。 就是np数组的拼接方式
# torch.cat() 传参 :第一个 数组 里面是要拼接的tensor 第二个 dim 拼接的轴 注意 拼接的轴 另一个轴的数据量要一样 拼接的轴数据量可以不一样
# 拼接 一个人完了再下一个人
t3=torch.cat([t1,t2],dim=0)
# print(t3)
# 堆叠 交替添加
# torch.stack 用于在新维度上拼接张量。换句话说,它会增加一个新的维度,然后沿指定维度堆叠张量 两个矩阵必须size一样
t4=torch.stack([t1,t2],dim=2)
print(t4.shape)
# stack 补充解析
# 1. 从维度的视角看 会新加一个维度 维度的大小为进行stack矩阵的数量 然后这个位置在新tensor的位置就是dim
# 2. 从矩阵变换的视角看 比如二维矩阵 dim = 0 就是自己创建一个新的数组然后把 进行stack的两个矩阵放进去
# dim=1 就是两个矩阵 轮流取第一层的元素组成一个新矩阵的第一层
# dim=2 就是两个矩阵 轮流取第二层的元素组成新矩阵的第二层 新矩阵的第一层为
pass
# stack应用 把Image的tensor 转为 cv2的tensor
def demo1():
transform1=transforms.ToTensor()
img1=Image.open("assets/image/1.png")
# img1_t1=transform1(img1)
img1_t1=torch.rand(4,5,6,7)
print(img1_t1.shape)
img1_t2=torch.stack([img1_t1[0],img1_t1[1],img1_t1[2],img1_t1[3]],dim=3)
print(img1_t2.shape)
if __name__=="__main__":
# get_item()
# compute()
# hadamard()
# dotProduct()
# index()
# splice()
# demo1()
splice()
pass
import torch
from PIL import Image
from torchvision import transforms
def sci():
torch.set_printoptions(sci_mode=False)
return 0
# 形状操作
# reshape torch 的方法 改玩后的形状 的 元素个数要跟原来的一样 比如原来是10*10 改完后的元素个数必须为100 返回新的tensor
# 可以用于将张量转换为不同的形状,但要确保转换后的形状与原始形状具有相同的元素数量。
def reshape1():
torch.manual_seed(666)
t1=torch.rand(20,4)
# print(t1)
t2=torch.reshape(t1,(4,20)) # 传入被改的tensor 和形状
# 可以有一个维度为-1 代表程序自己通过其他维度的元素数量 自己算这个维度的元素数量
t3=torch.reshape(t1,(40,-1))
print(t3)
pass
# 也可以用view变形 tensor的方法
# 这个只能对张量里面的元素是内存连续的 才可以
# 对刚创建出来的tensor进行操作后 就很容易内存不连续 比如转置
# 返回的是原始张量视图,不重新分配内存,效率更高; 比reshape快 这个相当于浅拷贝 不会开新的内存 就是把原来的内存重新排列一下下标
def view1():
torch.manual_seed(666)
t1=torch.rand(20,4)
t2=t1.view(4,20)
t2[:,-1]=6
print(t2)
print(t1)
pass
# 交换维度 在二维矩阵上像转置一样
# transpose troch 方法 跟view 一样返回的是原tensor的视图 浅拷贝
# permute tensor 方法 返回一个新的 对维度重新排列 不是浅拷贝
def transpose1():
torch.manual_seed(666)
t1=torch.rand(20,4)
t3=torch.rand(20,4,3)
t2=torch.transpose(t1,0,1) # 传入tensor和要交换的维度
t4=torch.transpose(t3,1,2)
# print(t4.shape)
t5=t3.permute(1,2,0) # 传入 维度 传入维度的顺序为新的 tensor的维度排序 交换维度
pass
# tensor展平
# flatten tensor 方法
# flatten 用于将张量展平为一维向量
def flatten1():
torch.manual_seed(666)
t1=torch.rand(20,4,3)
t2=t1.flatten() # 传入开始 展平的层数 和结束展平的层数
sci()
print(t2)
pass
# 升维和降维
# 在后续的网络学习中,升维和降维是常用操作,需要掌握。 tensor 方法 返回新的
# - **unsqueeze**:用于在指定位置插入一个大小为 1 的新维度。 加个[]
# - **squeeze**:用于移除所有大小为 1 的维度,或者移除指定维度的大小为 1 的维度
def squeeze():
# 降维 一般用于 那些维度的元素数量为1的 直接就删掉了那个维度
torch.manual_seed(666)
t1=torch.rand(20,4,3,1,1)
t2=t1.squeeze() # 传入要删除的维度 默认全部 大小为1 的维度都要删
print(t2)
pass
# 升维
def unsqueeze():
# 升维 在一个维度上 加一个维度 一般都在指定维度的前面
torch.manual_seed(666)
t1=torch.rand(20,4,3,1,1)
t2=t1.unsqueeze(2) # 传入要删除的维度 默认全部 大小为1 的维度都要删
print(t2.shape)
pass
# 分割
# 可以按照指定的大小或者块数进行分割。
# chunk torch方法 按照传入的块数分割 平均 分完后元素的行数个数是平均的 列是最后被分的
# split 按照传入的每一块的元素 的行数分割
# 返回的都是 元组
def split1():
torch.manual_seed(666)
t1=torch.rand(20,4)
t2=torch.chunk(t1,20)
t3=torch.split(t1,2)
print(t3[0].shape)
# 广播机制 跟numpy差不多
# 广播机制
# 广播机制允许在对不同形状的张量进行计算,而无需显式地调整它们的形状。广播机制通过自动扩展较小维度的张量,使其与较大维度的张量兼容,从而实现按元素计算。
# 广播机制规则
# 广播机制需要遵循以下规则:
# - 每个张量的维度至少为1
# - 满足右对齐
# 被广播的那个矩阵 的被广播的维度大小为1
if __name__=="__main__":
# reshape1()
# view1()
# transpose1()
# flatten1()
# squeeze()
# unsqueeze()
split1()
pass
相关文章:

11.21 深度学习-tensor常见操作
import torch from PIL import Image from torchvision import transforms # 获取元素值 tensor.item() 返回一个数值 只能是tensor里面有一个数字的 # 我们可以把单个元素tensor转换为Python数值,这是非常常用的操作 # tensor 里面超过了1个数字就不行 def g…...

【MySQL课程学习】:MySQL安装,MySQL如何登录和退出?MySQL的简单配置
🎁个人主页:我们的五年 🔍系列专栏:MySQL课程学习 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 MySQL在Centos 7环境下的安装: 卸载…...

基于官网的Vue-router安装(2024/11)
!!!首先声明,官网很重要。其次,不知道为啥,我不会安装时看不懂官网,会了之后就能看懂了。 官网地址:https://router.vuejs.org/zh/guide/ 1.npm安装 npm install vue-router4 官方貌…...

未来已来:少儿编程竞赛聚焦物联网,激发创新潜力
随着人工智能与物联网技术(IoT)的快速发展,少儿编程教育正在迎来新的变革浪潮。近年来,各类少儿编程竞赛纷纷增加了物联网相关主题,要求学生结合编程知识和硬件设备设计智能家居、智慧城市等创新项目。这一趋势不仅丰富…...

archlinux安装waydroid
目录 参考资料 注意 第一步切换wayland 第二步安装binder核心模组 注意 开始安装 AUR安裝Waydroid 启动waydroid 设置网络(正常的可以不看) 注册谷歌设备 安装Arm转译器 重启即可 其他 参考资料 https://ivonblog.com/posts/archlinux-way…...

Oralce数据库巡检SQL脚本
文章目录 Oralce数据库巡检SQL脚本1 检查表空间使用情况2 检查是否有 offline 状态的表空间3 在线日志是否存在小于 50M 的及状态不正常4 检查锁阻塞5 查看是否有僵死进程6 检查是否有失效索引7 检查不起作用的约束8 缓冲区命中率9 数据字典命中率10 库缓存命中率11 内存中的排…...

CentOS使用中遇到的问题及解决方法
一、CentOS 7网络配置(安装后无法联网问题) 现象说明 在安装CentOS系统后,有可能出现无法联网的问题,虚拟机中的网络配置并没有问题,而系统却无法联网,也ping不通。 原因描述 CentOS默认开机不启动网络,因…...

ThinkPad t61p 作SMB服务器,打印服务器,pc ,android ,ipad利用此服务器互传文件
1.在t61p上安装win7 2,配置好smb 服务 3.再安装好打印驱动程序 4.pc与win7利用系统的网络互相发现,映射为硬盘使用。 5.android,ipad安装ES文件浏览器访问win7 共享文件夹,互传文件。 6.android手机安装FE文件浏览器,可以利用花生壳外网…...

php:使用Ratchet类实现分布式websocket服务
一、前言 最近需要做一个有关聊天的小程序,逻辑很简单,所以不打算用Swoole和workerman之类的,最后选择了Ratchet,因为简单易用,适合小型websocket服务。 二、问题 但是目前我的项目是分布式环境,统一通过Ng…...

储能场站安全风险挑战
电化学储能目前最大的痛点问题就是安全问题,制约了储能行业的发展。 首先:锂作为最活泼的金属加上有机溶剂的电解液,安全性天生就差。基因不行。 其次储能系统的BMS对电池管理相对粗放,不足以保证锂电池的安全运行。 当前储能产业…...

Ubuntu系统为同一逻辑网口配置不同网段的IP
近期遇到一个问题:机载计算机的载版上有两个网口,但是这两个网口本质上是一个独立网口一个交换机,即对于机载计算机而言这两个物理网口是同一个逻辑网口。但是我需要将这两个网口分别连接到两个设备,并配置不同网段的IP࿰…...

MySQL出现Waiting for table metadata lock的原因以及解决方法(已亲测)
参考:MySQL出现Waiting for table metadata lock的原因以及解决方法 - digdeep - 博客园 当对表执行truncate\drop 操作时,会出现一直处于等待的状态,通过show processlist可以看到TableA停滞在Waiting for table metadata lock的状态。kill…...

学会Lambda,让程序Pythonic一点
Lambda是Python里的高阶用法,要把代码写得Pythonic,就需要了解这些高阶用法,想说自己是一名真正的Python程序员,先要把代码写得Pythonic。 今天聊下Lambda的用法,写篇简短的用法说明。 Lambda是匿名函数的意思&#…...

GDPU 信息安全 期末复习
文章目录 第一章 绪论✅ 单选题✅ 简答题6. 假定你是单位的安全主管,为了提高单位的网络安全性,在制定单位的安全保障方案时,有哪些措施(包括技术和非技术的)?9. 有人说只要我有足够多的钱,就可…...

Python 使用 Token 认证方案连接 Kubernetes (k8s) 的详细过程
在 Kubernetes 中,使用 Token 认证是一种常见的客户端身份验证方式,尤其适用于 ServiceAccount。以下是详细的步骤,包括如何查看 Token、获取 API 服务地址、配置远程连接,以及如何在 Python 中连接 k8s。 1. 获取 Token 首先&a…...

【C++】ReadFile概述,及实践使用时ReadFile的速率影响研究
ReadFile 函数概述 ReadFile 是 Windows API 函数,用于从文件或设备(如串口、硬盘等)中读取数据。它是同步和异步 I/O 操作的基础函数。 函数原型 BOOL ReadFile(_In_ HANDLE hFile, // 文件或设备句柄_Out_write…...

Mysql的UPDATE(更新数据)详解
MySQL的UPDATE语句是用于修改数据库表中已存在的记录,本文将详细介绍UPDATE语句的基本语法、高级用法、性能优化策略以及注意事项,帮助您更好地理解和应用这一重要的SQL命令。 1. 基本语法 单表更新 单表更新的基本语法如下: UPDATE [LOW…...

基于Java Springboot高校奖助学金系统
一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…...

如何在 Ubuntu 22.04 上安装带有 Nginx 的 ELK Stack
今天我们来聊聊如何在 Ubuntu 22.04 服务器上安装 ELK Stack,并集成 Nginx 作为 Web 服务器,同时使用 Let’s Encrypt Certbot 进行 SSL 认证。ELK Stack,包括 Elasticsearch、Logstash 和 Kibana,是一套强大的工具,用…...

Python爬虫:深入探索1688关键词接口获取之道
在数字化经济的浪潮中,数据的价值愈发凸显,尤其是在电商领域。对于电商平台而言,关键词不仅是搜索流量的入口,也是洞察市场趋势、优化营销策略的重要工具。1688作为中国领先的B2B电商平台,其关键词接口的获取对于商家来…...

Let‘s Encrypt SSL证书:acmessl.cn申请免费3个月证书
目录 一、CA机构 二、Lets Encrypt特点 三、申请SSL 一、CA机构 Lets Encrypt是一个由非营利组织Internet Security Research Group (ISRG)运营的证书颁发机构(CA),旨在通过自动化和开放的方式为全球网站提供免费、可靠的SSL/TLS证书。…...

JSON Web Token (JWT)的简单介绍、验证过程及令牌刷新思路
目录 一、JWT 1、什么是Jwt 2、为什么要使用Jwt 3、应用场景 4.Jwt的组成 4.1、Header 4.2、Payload 4.3、signature 二、Jwt验证过程 1、生成Jwt令牌 2、解析旧的Jwt 3、复制Jwt 4、Jwt有效时间测试 三、Jwt令牌刷新思路 1、配置JwtFilter过滤器 2、登录生成Jwt令…...

xxl-job入门
xxl-job , 定时任务 分布式 , 带来的问题的 解决方案 像之前 很多项目都用到定时任务, 但是如果要改为 分布式, 那么定时任务 就要用到 xxl-job 1.用户画像 拼多多,看了某个东西后,推荐类似东西, 做埋…...

100.【C语言】数据结构之二叉树的堆实现(顺序结构) 1
目录 1.顺序结构 2.示意图 编辑 从物理结构还原为逻辑结构的方法 3.父子节点编号的规律 4.顺序存储的前提条件 5.堆的简介 堆的定义 堆的两个重要性质 小根堆和大根堆 6.堆的插入 7.堆的实现及操作堆的函数 堆的结构体定义 堆初始化函数HeapInit 堆插入元素函…...

大模型 VS 大语言模型
最近很多朋友搞不懂大模型和大预言模型的区别,总是把大模型就认为是大语言模型。 今天就用这篇帖子做一个科普。 大模型 概念:大模型是指拥有超大规模参数(通常在十亿个以上)、复杂计算结构的机器学习模型。它通常能够处理海量数…...

Linux高阶——1117—TCP客户端服务端
目录 1、sock.h socket常用函数 网络初始化函数 首次响应函数 测试IO处理函数 获取时间函数 总代码 2、sock.c SOCKET() ACCEPT()——服务端使用这个函数等待客户端连接 CONNECT()——客户端使用这个函数连接服务端 BIND()——一般只有服务端使用 LISTEN()——服务端…...

【Qt】Qt 在main.cpp中使用tr()函数报错
1. 问题 Qt 在main.cpp中使用tr()报错。 error: tr was not declared in this scope2. 解决方法 main.cpp中注意如下: //添加头文件 #include <QObject>//添加QObject QObject::tr("Hello")3. 参考 Qt tr()函数不起效的小问题...

面向对象高级(5)接口
面向对象高级(5) 接口 接口就是规范,定义的是一组规则,体现了现实世界中“如果是...则必须能...”的思想。继承是一个"是不是"的is-a关系,而接口实现则是 "能不能"的has-a关系。 1、接口的定义格…...

uniapp发布android上架应用商店权限
先看效果: 实现原理: 一、利用uni.addInterceptor的拦截器,在一些调用系统权限前拦截,进行弹窗展示,监听确定取消实现业务逻辑。 二、弹窗是原生nativeObj进行drawRect绘制的 三、权限申请调用使用的 plus.android.…...

Centos Stream 9安装Jenkins-2.485 构建自动化项目步骤
官网:https://www.jenkins.io/ 1 下载 环境准备: 版本支持查询:https://pkg.jenkins.io/redhat-stable/ 安装JDK17:https://blog.csdn.net/qq_44870331/article/details/140784297 yum -y install epel-release wget upgradew…...