深度学习pytorch

pytorch 数据类型

pytorch不是完备的语言库,无法直接处理string

如何处理string 使用onehot编码 embedding:word2vec\glove

对于pytorch来说 数据是同一个数据在cpu 和GPU 数据类型是不一样的,gpu.tensor

GPU tensor  torch.cuda.floatTensor  

a = torch.randn(2,3)

a.type() =>torch.FloatTensor

isinstance()

标量 torch.tensor(1.)

dimension 0/rank 0   在计算loss中用的比较多

a.shape => torch.Size([])

len(a.shape) => 0

a.size()=》 torch.Size([])
Dim 1 /rank 1    bias 偏度 使用dim 1的数据、linear input 

torch.tensor(接收数据内容)  FloatTensor(数据维度)

Dim 2    Linear Input Batch

torch.randn(2,3)  随机初始化一个tensor  2维    2行 3列

Dim 3   RNN Input Batch

torch.rand(1,2,3)  第一维1个元素 第二维2个元素,第三维3个元素

Dim 4 图片类型  CNN Input batch

torch.rand(2,3,28,28)    (2张照片,3通道,长,宽)   (b,c,h,w)

a.numel() 所有元素数量

a.dim()  维度 

import from numpy

a = np.array([2,3.3])
torch.from_numpy(a)  # 从numpy array 导成tensor类型

#直接用torch.tensor
torch.tensor([2., 3.2])  小写tensor接收数据
Tensor(维度)  # 大写Tensor可接收数据维度
Torch.empty()  不初始化的数据,先初始化tensor再喂给网络

Torch.FloatTensor(d1,d2,d3)   Tensor默认是FloatTensor

torch.set_default_tensor_type(torch.DoubleTensor) #转默认成 DoubleTensor
# 随机初始化Tensor
rand/rand_like randint

rand  默认[0,1] 范围内
rand(min,max,shape)

randn  正态分布 默认是服从N(0,1)分布
randn(shape)


torch.full(shape,full的值)  # 将tensor全部填充为指定值


arange/range  递增递减
torch.arange(0,10,2)  # 建议使用arnage 不用range


linspace/logspace
torch.linspace(0,10, step=4) 0-10切分为4个数
torch.logspace 生成log数

randperm : random.shuffle
index 
a.torch.rand(4,3,28,28)
索引 切片和python相同 a[0] 第一个维度索引
a[0,0]

a[:2]
隔行采样 a[:,:,0:28:2,0:28:2].shape  => torch.Size([4,3,14,14])

a[....2]  前面几维都默认全选

select by mask
.masked_select()
mask = x.ge(0.5)
得到一个torch.unit8的稀疏矩阵
torch.masked_select(x,mask) 取出x中大于0.5的数据

torch.take()
维度变换
view/reshape  都一样
reshape 和numpy一致

lost dim information 


squeeze  挤压 减少维度
unsqueeze  增加维度

a.shape =>torch.Size([4,1,28,28])
a.unsqueeze(0).shape => torch.Size([1,4,1,28,28])
a.unsqueeze(-1).shape => torch.Size([4,1,28,28,1])  # unsqueeze 新插入一个维度,参数为插入位置

a = torch.tensor([1.2,2.3])

a.unsqueeze(-1)=> tensor([1.2000],[2.3000])
a.unsqueeze(0) => tensor([[1.20000,2.3000]])

squeeze 维度删减同样的道理
只能挤压shape 为1 的维度,默认全都把shape1的都挤压掉
expand/repeat

[1,32,1,1] 扩展到 [4,32,14,14]  

expand: broadcasting  shape为1 的维度可以扩张  参数为扩张后的shape

repeat :memory copied  shape为任何数都可以扩张 参数是新的dimension需要拷贝的次数  

矩阵转置
.t()  只能适用于dim2的tensor

任意维度使用 transpose() 两两交换 .contiguous()  交换之后把内存顺序变得连续

permute()  参数为原维度,得到结果为参数顺序的维度


Broadcast 自动扩展 

tensor做运算 自动插入unsqueeze  expand

why broadcasting

1, for actual demanding
2, memory consumption

cat 

矩阵相乘  2d tensor torch.mm

torch.matmul  @符号  可以做降维

次方 pow()

平方根 sqrt()

torch.exp 自然对数

torch.log() 做log 默认以e为底

.floor() 向下取整  ceil() 向上取整

.clamp() 裁剪  gradient clipping clamp(min,max)  小于min的变为min  大于max变为max

statistics 统计方法

矩阵范数 .norm(范数,dim=指定维度)  .norm(1) .norm(2)  1范数 2范数

mean sum min max prod

argmax argmin  最大最小的索引

dim 

topk \kthvalue

where 根据条件选择

torch.where(condition,x,y)  选择器 如果满足condition取x得值,否则取y的值

gather

torch.gather(input,dim,index,out=None)  通过索引index 在dim维检索input中的数值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值