首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

【PyTorch学习笔记】3:创建Tensor的多种方法

  • 25-03-03 22:41
  • 3308
  • 8675
blog.csdn.net

创建Tensor的多种方法

从numpy创建
import torch
import numpy as np

a = np.array([2, 3.3])
a = torch.from_numpy(a)  # torch.DoubleTensor
  • 1
  • 2
  • 3
  • 4
  • 5
从list创建
a = torch.FloatTensor([2, 3.3])  # 尽量少用这种方式,容易和给shape的情况看混淆
b = torch.tensor([2, 3.3])  # 现有list时尽量用这种方式
  • 1
  • 2

注意小写的tensor只接受现有的数据;而大写的Tensor相当于就是FloatTensor,既可以接收现有的数据,也可以接受shape来创建指定形状的Tensor。

仅指定维度的初始化

前面都提供了里面元素的具体值,也可以按照shape来创建,而先不为其提供具体值。

# 生成2行3列的数据
a = torch.empty(2, 3)
b = torch.FloatTensor(2, 3)
c = torch.IntTensor(2, 3)
  • 1
  • 2
  • 3
  • 4
修改tensor的默认类型

使用torch.tensor传入浮点数元素,或者使用torch.Tensor仅指定维度时,生成的默认是FloatTensor,也可以修改默认设置使其默认是其它类型的。

print(torch.tensor([1, 2.2]).type())
torch.set_default_tensor_type(torch.DoubleTensor)
print(torch.tensor([1, 2.2]).type())
  • 1
  • 2
  • 3

运行结果:

torch.FloatTensor
torch.DoubleTensor
  • 1
  • 2
随机初始化
# 采样自0~1均匀分布
a = torch.rand(3, 3)

# 形如*_like接受一个Tensor,将这个Tensor的shape读取出来之后在送入*所表示的函数
# 下面的rand_like(a)即将a的shape=3,3读出来传给torch.rand()函数
b = torch.rand_like(a)  # 相当于执行了torch.rand(3,3)

# 在区间[1,10)上随机采样,生成shape=2,2的LongTensor
c = torch.randint(1, 10, [2, 2])

# 采样自N(0,1)
d = torch.randn(3, 3)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
使用相同元素构建
# shape=2,3,所使用的相同的元素为7
b = torch.full([2, 3], 7)
  • 1
  • 2
指定参数的正态分布
# 指定均值和标准差
a = torch.normal(mean=torch.full([10], 0), std=torch.arange(1, 0, -0.1))
  • 1
  • 2
arange

注意torch.range()是包含结尾的,但是已经被弃用了,一律用arange就好。

c = torch.arange(0, 8, 2)  # tensor([0, 2, 4, 6])
  • 1
linespace

注意linespace和arange的区别,前者的最后一个参数是生成的Tensor中元素的数量,而后者的最后一个参数是步长。

tensor([0.0000, 2.6667, 5.3333, 8.0000])
  • 1
logspace

从10的n次方取到10的m次方,指数是等差的,也就是元素值是等比的。

e = torch.logspace(0, -1, 5)  # tensor([1.0000, 0.5623, 0.3162, 0.1778, 0.1000])
  • 1
全0
a = torch.zeros([3, 4])
  • 1
全1
b = torch.ones([3, 4])
  • 1
对角阵
c = torch.eye(3, 4)  # 只能是二维的,传入dim=2的shape
  • 1

也可以只给一个参数n,得到的就是n阶的对角方阵。

randperm

使用randperm可以生成一个从0开始的、已经打乱的连续索引Tensor,用它可以对其它Tensor做shuffle。特别是在有几个需要保持一致顺序的Tensor时,用相同的索引Tensor就能保证shuffle之后的Tensor在那个维度上的顺序一致了。

import torch

# 两个Tensor的shape[0]是相同的,都是3
a = torch.rand(3, 1)
b = torch.rand(3, 1)
print(a, b, sep='\n')
print("-" * 20)

# 制造一个[0,3)的索引序列
idx = torch.randperm(3)
print(idx)
print("-" * 20)

# 给a,b做shuffle,保证第一个维度在shuffle后的对应关系不变
a_sf = a[idx]
b_sf = b[idx]
print(a_sf, b_sf, sep='\n')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

运行结果:

tensor([[0.2253],
        [0.6864],
        [0.9565]])
tensor([[0.7317],
        [0.0779],
        [0.3842]])
--------------------
tensor([2, 1, 0])
--------------------
tensor([[0.9565],
        [0.6864],
        [0.2253]])
tensor([[0.3842],
        [0.0779],
        [0.7317]])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树人工智能深度学习416686 人正在系统学习中
注:本文转载自blog.csdn.net的LauZyHou的文章"https://blog.csdn.net/SHU15121856/article/details/87731878"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top