深度学习--tensor(创建、属性)

一、torch概念

1.1简介

pytorch简称torch,意为深度学习框架。它使用**张量(tensor)**来表示数据,可以轻松地处理大规模数据集,且可以在GPU上加速。

pytorch基本功能:自动微分、自动求导等。

1.2安装

官网获得下载命令。

二、tensor概述

pytorch将数据封装成张量进行计算。

2.1概念

张量:元素类型相同的多维矩阵,可以在GPU上于运行。

张量的维度决定了它的形状:

(1)0维张量:标量;

(2)1维张量:向量、数组;

(3)2维张量:矩阵;

(4)更高维度张量:图像、视频等。

2.2特点

(1)动态计算图;

(2)GPU支持;

(3)自动微分。

2.3数据类型

主要数据类型:浮点数float,整数int,布尔值True、False。

其中,浮点数和整数又分为8位、16位、32位、64位,加起来共9种。

三、tensor创建

3.1基本创建方式

(1)torch.tensor()

注意tensor为小写,根据指定的数据创建张量。

代码示例:

python 复制代码
# 指定数据进行创建 torch.tensor
import torch
import numpy as np
# 用标量创建张量
data = torch.tensor(7)   #0维张量
print(data)
print(data.shape)

结果:

tensor(7)

torch.Size(\[\])

(2)torch.Tensor()

注意tensor为大写,根据形状创建张量,也可用指定的数据创建张量。

代码示例:

python 复制代码
# 指定形状进行创建 torch.Tensor
def test01():
    tensor1 = torch.Tensor(3,4)
    print(tensor1)
    
    tensor2 = torch.Tensor([[1],[2],[3]])
    print(tensor2,tensor2.dtype)

    tensor3 = torch.Tensor([0])
    print(tensor3.shape,tensor3.dtype)

    tensor1 = torch.Tensor([1,2]).int()
    print(tensor1.dtype)

if __name__ == '__main__':
    test01()

结果:

tensor(\[-4.6947e-33, 1.9716e-42, 0.0000e+00, 0.0000e+00,

0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00,

0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00])

tensor(\[1., 2., 3.]) torch.float32

torch.Size(1) torch.float32

torch.int32

(3)torch.IntTensor()

用于创建指定类型的张量。

代码示例:

python 复制代码
# 指定类型进行创建 torch.IntTensor
data = torch.IntTensor(3,3)
print(data)
print(data.shape,data.dtype)

结果:

tensor(\[-1983708176, 1407, 0,

0, 0, 0,

0, 0, 0], dtype=torch.int32)

torch.Size(3, 3) torch.int32

3.2创建线性张量

利用API:

torch.arange():PyTorch 中用于生成一个一维张量(向量)的函数,该张量包含从起始点到结束点(不包括结束点)的等间隔数值序列。

torch.linspace((start,end,steps)):返回一个一维张量,包含在区间 `start, end` 上均匀间隔的 `steps` 个点。

代码示例:

python 复制代码
# 创建线性张量
import torch
def tensor():
    data = torch.arange(0,9,2)
    print(data,data.shape,data.dtype)

    data1 = torch.linspace(1,10,3)
    print(data1,data1.shape,data1.dtype)

tensor()

结果:

tensor(0, 2, 4, 6, 8) torch.Size(5) torch.int64

tensor( 1.0000, 5.5000, 10.0000) torch.Size(3) torch.float32

3.3创建随机张量

随机数种子:torch.manual_seed()

获取随机数种子:torch.initial_seed()

创建随机张量:torch.rand--均匀分布 / torch.randn--正态分布

代码示例:

python 复制代码
# 创建随机张量
import numpy as np
def random_t():
    torch.manual_seed(33)
    print(torch.initial_seed())

    data = torch.rand(3,4)
    data2 = torch.randn(2,3).int()
    print(data,data.shape,data.dtype)
    print(data2,data2.shape,data2.dtype)
    return 
random_t()

结果:

33

tensor(\[0.6186, 0.5587, 0.1937, 0.3360,

0.2008, 0.6970, 0.6367, 0.1452,

0.8213, 0.2365, 0.3702, 0.9168]) torch.Size(3, 4) torch.float32

tensor(\[ 0, 0, -1,

0, -1, 1], dtype=torch.int32) torch.Size(2, 3) torch.int32

四、tensor常见属性

4.1获取属性

Tensor张量常见属性有三个:dtype(获取类型),shape(获取形状),device(获取运行设备)

代码示例:

python 复制代码
import torch
import numpy as np
data = torch.tensor(np.random.randint(0,10,(2,2)))
print(data)
print(data.shape)
print(data.dtype)
print(data.device)

结果:

tensor(\[4, 4, 6, 5], dtype=torch.int32)

torch.Size(2, 2)

torch.int32

cpu

4.2切换设备

主要是指CPU,GPU之间的相互转换。

注意:这里都要重新赋值

(1)直接data.cuda()

(2)在创建张量时指定device类型

(3)重新赋值data.to(device)

代码示例:

python 复制代码
# 切换设备
import torch
import numpy as np
data = torch.tensor(np.random.randint(0,10,(2,2)))
print(data)
print(data.shape)
print(data.dtype)
print(data.device)

device = 'cuda' if torch.cuda.is_available() else 'cpu'
data_new = data.to(device=device)
print(data_new.device)

data2 = torch.tensor([1,2,3],device='cpu')
print(data2.device)

data3 =  torch.tensor([1,2,3],dtype=torch.float32)
data3_new = data3.cuda()
print(data3_new.device)

结果:

tensor(\[4, 6, 5, 8], dtype=torch.int32)

torch.Size(2, 2)

torch.int32

cpu

cpu

cpu

Torch not compiled with CUDA enabled(这里是因为我没有安装GPU)

4.3类型转换

(1)使用type进行转换,在type()括号内填上需要转换为的目标类型;

(2)重新赋值 data = data.int()

(3)创建张量时指定类型 dtype= torch.int64

代码示例:

python 复制代码
# 类型转换
import torch
import numpy as np

data = torch.tensor(np.random.randn(3,4),dtype=torch.int64)
print(data,data.dtype)

data2 = torch.tensor([[1,2],[3,4]])
data2 = data2.float()
print(data2,data2.dtype)

data3 = torch.tensor([8,9,0])
data3 = data3.type(torch.bool)
print(data3,data3.dtype)

结果:

tensor(\[ 0, 0, 0, -2, 0, 1, 0, -1, 1, 0, 0, 0]) torch.int64

tensor(\[1., 2., 3., 4.]) torch.float32

tensor( True, True, False) torch.bool

五、小结

综上,简单学习了张量的创建以及张量相关属性的获取,数据类型的修改方式。都是一些简单的基本操作,但是对于不熟的代码还是要勤加练习。

相关推荐
字节数据平台32 分钟前
iDA:从 ChatBI 到专业数据分析助手的演进之路
大数据·人工智能·机器学习·数据分析
warpdrivelabs44 分钟前
Codex 开源 harness 全面了解
开发语言·人工智能
mit6.8241 小时前
微软如何交付企业级Agent
人工智能
Mininglamp_27181 小时前
明略科技携手海康机器人亮相世界机器人大会,以“Agent+具身“联合进入商业机器人场景
人工智能·科技·机器人·开源·agent·ai agent
2401_894915531 小时前
GEO 优化源码全解析:从搜索引擎到 AI 引擎的底层改写逻辑
java·服务器·前端·数据库·人工智能·分布式·搜索引擎
MobotStone2 小时前
从“听得懂”到“干得了”:工业大模型落地工厂的三层进化路线
人工智能
wangruofeng3 小时前
GLM-5.3-Flash 发布:追平 Opus 4.8 的智力,1/40 的价格,跑在国产芯片上
人工智能·aigc·chatglm (智谱)
皮皮虾❀5 小时前
钉钉AI服务商×教育行业:AI现代产业学院共建一体化实战——从“高校AI教学缺平台”到“校企共建AI产业学院培养数字化人才
人工智能·钉钉
火山引擎开发者社区5 小时前
【议程来了】火山引擎开发者社区技术日・NVIDIA 独家赞助-成都站
人工智能
三声三视5 小时前
从崩溃日志到 AI 技能:tri-god 蒸馏实战
人工智能·ai·aigc·agent