深度学习--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 ## 五、小结 综上,简单学习了张量的创建以及张量相关属性的获取,数据类型的修改方式。都是一些简单的基本操作,但是对于不熟的代码还是要勤加练习。

相关推荐
新知图书36 分钟前
Encoder-Decoder架构的模型简介
人工智能·架构·ai agent·智能体·大模型应用开发·大模型应用
大模型真好玩1 小时前
低代码Agent开发框架使用指南(一)—主流开发框架对比介绍
人工智能·低代码·agent
tzc_fly1 小时前
AI作为操作系统已经不能阻挡了,尽管它还没来
人工智能·chatgpt
PKNLP1 小时前
深度学习之神经网络1(Neural Network)
人工智能·深度学习·神经网络
文火冰糖的硅基工坊2 小时前
《投资-99》价值投资者的认知升级与交易规则重构 - 什么是周期性股票?有哪些周期性股票?不同周期性股票的周期多少?周期性股票的买入和卖出的特点?
大数据·人工智能·重构·架构·投资·投机
Elastic 中国社区官方博客2 小时前
Elasticsearch:使用推理端点及语义搜索演示
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
AI新兵2 小时前
深度学习基础:从原理到实践——第一章感知机(中)
人工智能·深度学习
liliangcsdn2 小时前
从LLM角度学习和了解MoE架构
人工智能·学习·transformer
ARM+FPGA+AI工业主板定制专家3 小时前
基于ZYNQ FPGA+AI+ARM 的卷积神经网络加速器设计
人工智能·fpga开发·cnn·无人机·rk3588
伏小白白白3 小时前
【论文精度-1】 组合优化中的机器学习:方法论之旅(Yoshua Bengio, 2021)
人工智能·机器学习·组合优化