关键词:
本文已收录于Pytorch系列专栏: Pytorch入门与实践 专栏旨在详解Pytorch,精炼地总结重点,面向入门学习者,掌握Pytorch框架,为数据分析,机器学习及深度学习的代码能力打下坚实的基础。免费订阅,持续更新。
认识张量
张量是一个多维数组 ,它是标量、向量、矩阵的高维拓展。
比如说对于一张图片,它是3维张量,其中RGB就是其第三维张量。
Tensor与 Variable
Variable是Pytorch的0.4.0版本之前的一个重要的数据结构,但是从0.4.0开始,它已经并入了Tensor中了。
Variable是 torch.autograd 中的数据类型,主要用于封装Tensor ,进行自动求导。
- data: 被包装的 Tensor
- grad: data 的梯度
- grad_fn: 创建 Tensor 的 Function ,是自动求导的关键。比如说是加法还是乘法之类的。
- requires_grad: 指示是否需要梯度,有些不需要梯度,设置为false可以节省内存。
- is_leaf: 指示是否是叶子结点(张量)
Tensor
PyTorch0.4.0版开始, Variable 并入 Tensor
- dtype: 张量的数据类型,如 torch.FloatTensor FloatTensor, torch.cuda.FloatTensor(cuda表示数据放在了GPU上)
- shape: 张量的形状,如 (64, 3, 224, 224)
- device: 张量所在设备, GPU/CPU ,是加速的关键
张量的创建
一、直接创建
torch.tensor()
功能:从data 创建 tensor
- data : 数据 , 可以是 list, numpy
- dtype : 数据类型,默认与 data 的一致
- device 所在设备 , cuda cpu
- requires_grad :是否需要梯度
- pin_memory :是否存于锁页内存
实例如下:
import torch
import numpy as np
# Create tensors via torch.tensor
flag = True
if flag:
arr = np.ones((3, 3))
print("type of data:", arr.dtype)
t = torch.tensor(arr, device=cuda)
print(t)
type of data: float64
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], device=cuda:0, dtype=torch.float64)
其中,cuda表示采用了gpu,0是gpu的标号,由于只有一个gpu,因此是0。
torch.from_numpy(ndarray)
功能:从numpy 创建 tensor
注意事项:从 torch.from_numpy 创建的 tensor 于原 ndarray 共享内存 ,当修改其中一个的数据,另外一个也将会被改动。
实例代码:
# Create tensors via torch.from_numpy(ndarray)
arr = np.array([[1, 2, 3], [4, 5, 6]])
t = torch.from_numpy(arr)
print("numpy array: ", arr)
print("tensor : ", t)
print("\\n修改arr")
arr[0, 0] = 0
print("numpy array: ", arr)
print("tensor : ", t)
print("\\n修改tensor")
t[0, 0] = -1
print("numpy array: ", arr)
print("tensor : ", t)
通过结果可见,指向相同。
numpy array: [[1 2 3]
[4 5 6]]
tensor : tensor([[1, 2, 3],
[4, 5, 6]], dtype=torch.int32)
修改arr
numpy array: [[0 2 3]
[4 5 6]]
tensor : tensor([[0, 2, 3],
[4, 5, 6]], dtype=torch.int32)
修改tensor
numpy array: [[-1 2 3]
[ 4 5 6]]
tensor : tensor([[-1, 2, 3],
[ 4, 5, 6]], dtype=torch.int32)
二、依据数值创建
2.1 torch.zeros()
功能:依size 创建全 0 张量
- size : 张量的形状 , 如 (3,3),(3,224,224)
- out : 输出的张量
- layout 内存中布局形式 , 有strided(默认), sparse_coo(这个通常稀疏矩阵时设置,提高读取效率) 等
- device 所在设备 , gpu cpu
- requires_grad :是否需要梯度
code:
out_t = torch.tensor([1])
t = torch.zeros((3, 3), out=out_t)
print(t, \\n, out_t)
print(id(t), id(out_t), id(t) == id(out_t))
可见,该out的值与t相同,因此out是一个输出的作用,将张量生成的数据赋值给另一个变量。
tensor([[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
tensor([[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
2211683380904 2211683380904 True
2.2 torch.zeros_like()
功能:依据input 形状创建全 0 张量
- intput : 创建与 input 同形状的全 0 张量
- dtype : 数据类型
- layout 内存中布局形式
2.3 torch. ones()
2.4 torch. ones_like()
功能:input 形状创建全 1 张量
其他参数一样同上。
2.5 torch. full()
2.6 torch.full_like()
功能:依据input 形状创建指定数据的张量
- size : 张量的形状 , 如 (3,3)
- fill_value : 张量的值
code
t = torch.full((3, 3), 5)
print(t)
tensor([[5, 5, 5],
[5, 5, 5],
[5, 5, 5]])
2.7 torch. arange
功能:创建等差的1 维张量
注意事项:数值区间为[start,end)
- start : 数列起始值
- end : 数列“结束值”
- step : 数列公差,默认为 1
code
t = torch.arange(2, 10, 2)
print(t)
tensor([2, 4, 6, 8])
2.8 torch. linspace
功能:创建均分的1 维张量
注意事项:数值区间为[start,end)
- start : 数列起始值
- end : 数列结束值
- steps : 数列长度,注意是长度。
它的步长就是(end - start)/ steps。
t = torch.linspace(2, 10, 6)
print(t)
tensor([ 2.0000, 3.6000, 5.2000, 6.8000, 8.4000, 10.0000])
2.9 torch. logspace
功能:创建对数均分的1 维张量
注意事项:长度为steps, 底为 base
- start : 数列起始值
- end : 数列结束值
- steps : 数列长度
- base : 对数函数的底,默认为 10
2.10 torch. eye()
功能:创建单位对角矩阵(2 维张量)
注意事项:默认为方阵
- n : 矩阵行数
- m : 矩阵列数
三、依概率分布创建张量
3.1 torch. normal()
功能:生成正态分布(高斯分布)
- mean : 均值
- std : 标准差
四种模式: mean为标量, std为标量 mean为标量, std为张量 mean为张量, std为标量 mean为张量, std为张量
后三种基本用法相同,都是根据不同的维数进行
code:
# the mean and std both are tensors
mean = torch.arange(1, 5, dtype=torch.float)
std = torch.arange(1, 5, dtype=torch.float)
t_normal = torch.normal(mean, std)
print("mean:\\nstd:".format(mean, std))
print(t_normal)
由结果可知,其生成的tensor是上面每一维度的参数生成的。
mean:tensor([1., 2., 3., 4.])
std:tensor([1., 2., 3., 4.])
tensor([1.6614, 2.5338, 3.1850, 6.4853])
需要注意的是,对于mean和std都是标量的情况下,需要指定生成的size。
# mean: scalar std: scalar
t_normal = torch.normal(0., 1., size=(4,))
print(t_normal)
tensor([0.6614, 0.2669, 0.0617, 0.6213])
3.2 torch. randn ()
3.3 torch. randn_like ()
功能:生成标准正态分布(均值为0,方差为1)
size : 张量的形状。
3.4 torch. rand()
3.5 torch. rand_like
功能:在区间[0,1) 上,生成均匀分布
3.6 torch. randint ()
3.7 torch. randint_like ()
功能:区间[low, high) 生成整数均匀分布
size : 张量的形状
3.8 torch. randperm ()
功能:生成生成从0 到 n-1 的随机排列
n : 张量的长度
3.9 torch. bernoulli ()
功能 :以 input 为概率,生成伯努力分布(0 1 分布,两点分布)
input : 概率值
pytorch之张量的相关介绍(代码片段)
...I创建tensortorch.Tensor和torch.tensor的区别torch.Tensortorch.tensor()Pytorch中tensor的常用方法获取tensor中的数据(当tensor中只有一个元素可用):tensor.it 查看详情
Pytorch:copy.deepcopy 与 torch.tensor.contiguous()?
】Pytorch:copy.deepcopy与torch.tensor.contiguous()?【英文标题】:Pytorch:copy.deepcopyvstorch.tensor.contiguous()?【发布时间】:2021-01-2601:12:55【问题描述】:在pythontorch中,似乎copy.deepcopy方法通常用于创建torch张量的深层副本,而不是创建现有... 查看详情
pytorch-张量tensor详解(线性回归实战)(代码片段)
文章目录创建运算微分实战张量(tensor)是Pytorch中最基本的操作对象,表示一个多维矩阵,类似numpy中的ndarrays,是可以在GPU上使用以加速运算。创建直接创建张量:函数功能ones(*sizes)全1Tensorzeros(*sizes)全0T... 查看详情
pytorch中tensor张量的创建
...为1print(torch.randn([3,4]))D:anacondapython.exeC:/Users/liuxinyu/Desktop/pytorch_test/day1/tensor.pytensor([1,2,3])tensor([[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14]],dtype=torch.int32)tensor([[0.,0.,0.,0.],[0.,0.,0.,0.],[0.,0.,0.,0.]])tensor([[1.,1.,1.,1.],[1.,1.,1.,1.],[1.,1.,1.,1.]])tensor([[0.,0... 查看详情
pytorch深度学习实战3-2:什么是张量?tensor的创建与索引(代码片段)
目录1什么是张量?2Pytorch数据类型与转化3张量Tensor的创建3.1类型创建3.2序列转换3.30/1张量3.4对角张量3.5正态张量3.6随机向量3.7线性张量4张量Tensor的索引4.1下标索引4.2条件索引4.3附加控制索引1什么是张量?张量(Tensor)是多... 查看详情
[pytroch系列-4]:pytorch基础-张量(tensor)的创建方法(代码片段)
作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119424611目录第1部分 前置条件1.1导入库及检查版本1.2HelloWorld第2部分创建普通Tensor实例的代码示例2.1通过函数... 查看详情
深度学习-pytorch张量tensor详解(线性回归实战)(代码片段)
...一下给大家。点击跳转到网站。张量(tensor)是Pytorch中最基本的操作对象,表示一个多维矩阵,类似numpy中的ndarrays,是可以在GPU上使用以加速运算。创建直接创建张量 查看详情
tensorflow与pytorch张量互转(代码片段)
1、tensorflow张量转pytorch张量tensorflow(Tensor)–>numpy.ndarray–>pytorch(Tensor)importtorchimporttensorflowastftf_tensor=tf.constant([1,2,3])withtf.compat.v1.Session().as_default(): np_array=tf_tensor.eval()torch_tensor=torch.from_numpy(np_array)2、pytorch张量转tensor... 查看详情
深度学习03:pytorch的数据类型tensor(代码片段)
目录PyTorch的数据类型:Tensor函数查找一、Tensor的创建二、Tensor的运算三、Tensor的操作四、NumPy转换一、Tensor的创建二、Tensor的运算2.1张量元素比较2.2基本运算2.2.1逐元素加减乘除2.2.2幂运算2.2.3指数对数运算2.2.4平方根及其倒... 查看详情
[pytorch]tensor
...张量是一种特殊的数据结构,与数组和矩阵非常相似。在PyTorch中,我们使用张量来编码模型的输入和输出,以及模型的参数。张量类似于NumPy的ndarray,张量可以在GPU或其他支持硬件加速器上运行。事实上,张量和NumPy数组通常可... 查看详情
pytorch-张量tensor详解(线性回归实战)(代码片段)
文章目录创建运算微分实战张量(tensor)是Pytorch中最基本的操作对象,表示一个多维矩阵,类似numpy中的ndarrays,是可以在GPU上使用以加速运算。创建直接创建张量:函数功能ones(*sizes)全1Tensorzeros(*sizes)全0T... 查看详情
pytorch中tensor运算(代码片段)
文章目录PyTorch的简介PyTorch中主要的包PyTorch的安装使用GPU的原因使数据在GPU上运行什么使Tensor(张量)一些术语介绍Tensor的属性介绍(Rank,axis,shape)RankAxis(轴)shape(形状)不同环境下... 查看详情
pytorch理解张量tensor(代码片段)
本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052这是目录张量Tensor是什么?张量的创建为什么要用张量Tensor呢?总结张量Tensor是什么?在深度学习中,我们经常会遇到一个概念:张量Te... 查看详情
pytorch使用pytorch进行张量计算自动求导和神经网络构建(代码片段)
本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052首先,让我们介绍一下什么是pytorch,它是一个基于Python的开源深度学习框架,它提供了两个核心功能:张量计算和自动求导。张量计算张量... 查看详情
深度学习实验二(代码片段)
NNDL实验二pytorch入门一.概念:张量、算子1.张量:在深度学习框架中,数据经常用张量(Tensor)的形式来存储。张量是矩阵的扩展与延伸,可以认为是高阶的矩阵,是标量,向量,矩阵的高维拓展。2.算子:算子... 查看详情
pytorch:tensor-张量维度操作(拼接维度扩展压缩转置重复……)
张量维度操作(拼接、维度扩展、压缩、转置、重复……)note:torch.fun(tensor1)和tensor1.fun()都只会返回改变后的tensor,但是tensor本身的维度和数据都不会变。包括unsqueeze、expand等等。-柚子皮- torch.cat多个tensor直接拼接to... 查看详情
pytorch的基础记录
torch.abs(input,out=None):计算输入张量的每个元素的绝对值torch.acos(input,out=None):返回一个新张量,包含输入张量每个元素的反余弦函数torch.add(input,value,out=None):对输入张量input逐元素加上标量值value,并返回结果到一个新的张量out,即o... 查看详情
tensorflow与pytorch张量互转(代码片段)
1、tensorflow张量转pytorch张量tensorflow(Tensor)–>numpy.ndarray–>pytorch(Tensor)importtorchimporttensorflowastftf_tensor=tf.constant([1,2,3])withtf.compat.v1.Session().as_default(): np_array=t 查看详情