pytorch(3)创建Tensor

一、系列文章目录

(1)梯度下降
(2)手写数字识别引入&Pytorch 数据类型
(3)创建Tensor
(4)Broadcasting
(5)Tensor
(6)Tensor统计
(7)Where和Gather
(8)函数的梯度
(9)loss函数;自动求导



二.创建Tensor

1. 从numpy中引入

import torch
import numpy as np
a = np.array([2,3.3])
torch.from_numpy(a)  #不要写成 form

Out[13]: tensor([2.0000, 3.3000], dtype=torch.float64)

a = np.ones([3,3])  #指定形状,用1填充
torch.from_numpy(a)

Out[15]: 
tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]], dtype=torch.float64)

2. 从list中引入

torch.tensor([2,3.2]) #区分:FloatTensor 指定shape  用小写指定数据
Out[16]: tensor([2.0000, 3.2000])

torch.FloatTensor(2,3)
Out[18]: 
tensor([[5.1027e-08, 4.9116e-14, 2.4979e-38],
        [2.3518e-38, 1.5046e-36, 1.7636e+25]])#未初始化也有数字哦,所以要注意替换掉这个数字,防止报错

3. 未初始化

同上

4. 随机初始化

rand rand_like randint randn

rand 0-1之间均匀sample 设置shape例如(3,3)
rand_like 对象是一个tensor
randint 三个参数 最小值(包括),最大值(不包括),shape(例如[3,3])
randn 正态分布 设置shape例如(3,3)

5. full

torch.full([2,3],8) 
Out[22]: 
tensor([[8., 8., 8.],
        [8., 8., 8.]])
        
torch.full([],8)  #标量
Out[23]: tensor(8.)

6. arange/linspace

arange
设置范围,生成等差数列,默认公差1

torch.arange(0,10)
Out[24]: tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

第三位参数设置公差

linspace
设置范围和数量,等分切割

torch.linspace(0,10,steps=4)  #不是step哦
Out[26]: tensor([ 0.0000,  3.3333,  6.6667, 10.0000])

logspace
生成10的x次方

7. ones/zero/eye

eye 对角是1 只能接受1or2个参数

torch.ones_like(a) a是tensor

8. randperm & 切片&索引

randperm 随即打散 设置number 即有几个数字

a = torch.rand(2,3)
a
Out[5]: 
tensor([[0.8746, 0.1088, 0.2276],
        [0.0799, 0.4809, 0.4474]])
       
idex = torch.randperm(2)
idex
Out[7]: tensor([0, 1])

a[idex]
Out[9]: 
tensor([[0.8746, 0.1088, 0.2276],
        [0.0799, 0.4809, 0.4474]])
a=torch.rand(4,3,28,28) #4张图片,3个通道,28x28
a[0]  #第一张图片
a[:2]# 从0开始不包括2,即0,1   只对第一个参数有效
a[:2,1:,-1:,:]  #纯:表示全部, 
#1: 从1到最后   -1是反向检索,  ... -3-2-1
a=torch.rand(4,2)
a
Out[28]: 
tensor([[0.0452, 0.3856],
        [0.3025, 0.4022],
        [0.7373, 0.3566],
        [0.0446, 0.7041]])

a[0:4:2]#连在一起没有逗号
Out[29]: 
tensor([[0.0452, 0.3856],
        [0.7373, 0.3566]])
# 0:28:2     从0到28,不包括28,每隔2个取一次
a[0:4:3]
Out[30]: 
tensor([[0.0452, 0.3856],
        [0.0446, 0.7041]])

a.index_select(0,torch.tensor([0,2])).shape#list必须转化成tensor  
					   #表示第0个维度,第0个和第2个
Out[14]: torch.Size([2, 3, 2, 2])

a[...].shape#代表除了标明的范围,其余所有都是all
Out[15]: torch.Size([4, 3, 2, 2])
a[0,...].shape #如果用冒号+逗号非常麻烦
Out[16]: torch.Size([3, 2, 2])
a[0,...,::2].shape
Out[18]: torch.Size([3, 2, 1])

9. 改变

view/reshape 完全一样
a.view(_,_)    size一样就行
squeeze/unsqueeze压缩和扩张维度
a.unsqueeze(   )  dim是数字,范围是[-dim-1,dim+1)
squeeze  只能压缩1
b=torch.rand(32)
f=torch.rand(4,32,14,14)
b=b.unsqueeze(0).unsqueeze(2).unsqueeze(3)
b.shape
Out[28]: torch.Size([1, 32, 1, 1])
transpose/t/permute
.t只适用于矩阵,即2维
transpose只能改一次顺序
permute可以彻底改变顺序
expand/repeat
expand 改变数据理解方式(推荐,速度快节约内存)
repeat   数据增加

expand()参数为扩张结果
条件:dimention一致;只能从1扩张成n,不能扩张234...
repeat()参数为重复的次数
会改变原数据,一般不用
expand_as(A)  A为一个tensor
a=torch.rand(4,32,14,14)
b.shape
Out[30]: torch.Size([1, 32, 1, 1])
b.expand(4,32,-1,14).shape  #-1表示不变
Out[33]: torch.Size([4, 32, 1, 14])
b.expand(4,32,-1,14).shape
Out[33]: torch.Size([4, 32, 1, 14])
b.expand(-1,32,-1,-4).shape  # -4这是个bug  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值