美文网首页
【学习】pytorch总结

【学习】pytorch总结

作者: X_Ran_0a11 | 来源:发表于2022-07-28 17:06 被阅读0次

https://pytorch-cn.readthedocs.io/zh/latest/package_references/torch/

0.版本安装

https://zhuanlan.zhihu.com/p/319493995
https://zhuanlan.zhihu.com/p/421033852

1.torch

  • 基本语法
torch.Tensor([1,2]) #类,默认会生成单精度浮点的张量
torch.LongTensor([1,2,3]) #函数,生成64位整数型张量,也有其他的函数比如torch.IntTensor()
torch.tensor([1,2])  #函数,根据原始数据类型生成相应的张量

torch.is_tensor(obj) #如果是张量返回True
torch.numel(x) #返回张量元素个数

  • 创建张量
torch.tensor() #万能,但是可能需要定义数据格式
torch.from_numpy() #万能
torch.rand(2,3) #0-1的随机数
torch.randn(2,3) #标准正态分布
torch.arange(start,end,step=1) #通常不要使用torch.range,主要是区间闭合不闭合的问题,torch.arange(x)和range(x)是一致的
torch.arrange(x).reshape(a,b,c)# 配合使用
  • 拼接&拆分
torch.cat((x,y),dimension=0) # dim就是矩阵的维度,如果是二维矩阵,则跟axis是一致的
torch.chunk(x,3,dim=0) #按dim拆分成3块
torch.split(x,3,dim=0)#按dim拆分,拆分后每一块的dim维度为3,也可以输入特定list进行拆分,例如3变为[3,3,2],则拆分后的dim维度就是3,3,2
torch.index_select(x,dim,torch.LongTensor([0, 2]))#按dim维度索引(0,2)之间的数据
  • 维度变换
torch.squeeze() #降维
torch.stack(a,b,dim=0) #按特定维度进行连接,连接后维度改变
torch.t # 转置0,1维
torch.transpose(dim0,dim1) # 转置两个维度
torch.unbind(dim) #按特定维度切片,该维度移除,并返回元祖
torch.unsqueeze(dim) #在指定维度新增一个维度
torch.permute()

torch.permute():
https://blog.csdn.net/weixin_41377182/article/details/120808310

  • 数学运算
add()    Tensor中每个元素同加一个标量,或与另一个Tensor逐元素相加
mul()    Tensor中每个元素同乘一个标量,或与另一个Tensor逐元素相乘
div()    Tensor中每个元素同除一个标量,或与另一个Tensor逐元素相除
dot()    对两个Tensor向量进行“点积”
mm()    Tensor矩阵乘Tensor矩阵
mv()    Tensor矩阵乘Tensor向量
fmod()    Tensor中每个元素与一个标量的除法余数,相当于Python中的%操作
remainder()    Tensor中每个元素与一个标量的除法余数,相当于Python中的%操作
abs()    对Tensor中的每个元素取绝对值,并返回
ceil()    对Tensor中的每个元素向上取整
floor()    对Tensor中的每个元素向下取整
clamp()    对Tensor中的每个元素取上下限
round()    对Tensor中的每个元素取最近的整数
frac()    返回Tensor中每个元素的分数部分
neg()    对Tensor中的每个元素取负
reciprocal()    对Tensor中的每个元素取倒数
log()    返回一个张量,包含Tensor中每个元素的自然对数
pow()    对Tensor中的每个元素同取一个标量幂值,或采用另外一个Tensor的对应元素取幂
exp()    返回一个张量,包含Tensor中每个元素的指数
sigmoid()    返回一个张量,包含Tensor中的每个元素的sigmoid值
sign()    返回一个张量,包含Tensor中每个元素的正负值
sqrt()    返回一个张量,包含Tensor中每个元素的平方根
dist()    返回两个Tensor的范数
mean()    返回Tensor中所有元素的均值
norm()    返回Tensor的范数值
prod()    返回Tensor的所有元素之积
sum()    返回Tensor的 所有元素之和
max()    返回Tensor的所有元素的最大值
min()    返回Tensor的所有元素的最小值
mod()  返回dim维度上的众数值

2.torch.nn

  • 卷积层
    卷积的关键参数有:
    特征维度 in_channels
    卷积核个数 out_channels
    卷积核大小 kernel_size
    卷积移动步长 stride
    padding补充的层数 padding
    偏置 bias
nn.Conv1d(16, 33, 3, stride=2) # 一维卷积层,对最后一维进行卷积
nn.Conv2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2), dilation=(3, 1)) # 二维卷积层
nn.Conv3d(16, 33, (3, 5, 2), stride=(2, 1, 1), padding=(4, 2, 0)) # 三维卷积层

nn.ConvTranspose2d(16, 16, 3, stride=2, padding=1) # 2维的转置卷积操作
nn.Conv3d(16, 33, (3, 5, 2), stride=(2, 1, 1), padding=(0, 4, 2)) # 3维的转置卷积操作

  • 池化层
    https://blog.csdn.net/yingluo54/article/details/122168364
    关键参数:
    卷积核/窗口大小 kernel_size
    卷积移动步长 stride
    padding补充的层数 padding
    返回所属序号 return_indices
    窗口间隔 dilation
    顶层模式(保证能窗口滑动到最后一个参数) ceil_mode
nn.MaxPool1d(3, stride=2) #上采样
nn.MaxPool2d(3, stride=2)
nn.MaxPool3d(3, stride=2)
nn.MaxUnpool1d(2, stride=2) #下采样,需要上采样的indices
nn.MaxUnpool2d(2, stride=2)
nn.MaxUnpool3d(3, stride=2)
nn.AvgPool1d(3, stride=2)
nn.AvgPool2d(3, stride=2)
nn.AvgPool3d(3, stride=2)
  • 激活函数
nn.ReLU()
nn.ReLU6() #限制最大值为6,避免溢出
nn.Threshold(0.1, 20)
nn.Sigmoid()
nn.Tanh()
nn.LogSigmoid()
nn.Softmax()
  • 循环单元
    关键参数:
    输入特征数量 input_size
    隐层特征数量 hidden_size
    RNN层数 num_layers
    是否使用偏置权重 bias
    batch_first
    除了最后一层都会套上一个dropout层 dropout
    双向循环 bidirectional
nn.RNN(10, 20, 2)
nn.LSTM(10, 20, 2)
nn.GRU(10, 20, 2)
nn.LSTMCell(10, 20)
# 非batch_first的情况
lstm = nn.LSTM(10,20,1)  # input_size特征维度,hidden_size的embeding特征,num_layer
input = rotch.rand(5,3,10) # 单元长度,batch_size,input_size
h0 = torch.rand(1, 3, 20) #和input维度一致,只是长度为1,因为共用
c0 = torch.rand(1,3,20) #和input维度类似,只是长度为1,因为共用
outputs, (hn, cn) = rnn(input, (h0, c0)) #output的维度和input类似,只是特征维度变为embeding,hn和cn为最后一个单元的近期(就是output)和长期单元

# batch_first的情况
lstm = nn.LSTM(10,20,1,batch_first=True)  # input_size特征维度,hidden_size的embeding特征,num_layer
input = rotch.rand(3,5,10) # batch_size,单元长度,input_size
h0 = torch.rand(1, 3, 20) #和input维度一致,只是长度为1,因为共用,但是batch_size还是处在中间
c0 = torch.rand(1,3,20) #和input维度类似,只是长度为1,因为共用,但是batch_size还是处在中间
outputs, (hn, cn) = rnn(input, (h0, c0)) #output的维度和input类似,只是特征维度变为embeding,hn和cn为最后一个单元的近期(就是output)和长期单元
  • 线性层
nn.Linear(20, 30) #输入特征维度,输出特征维度,暂时不知道输出维度为什么有那么多,莫非是指有很多个线性层?
  • dropout层
nn.Dropout(p=0.2)
nn.Dropout2d(p=0.2)
nn.Dropout3d(p=0.2)
  • 损失函数
    关键参数:
    reduction: ‘none’ 为求 minibatch 中每个 sample 的 loss 值. ‘mean’ 为求整个 minibatch 的 loss 值,对 minibatch 中所有 sample 的 loss 值求平均. ‘sum’ 为求整个 minibatch 的 loss 值, 对 minibatch 中所有 sample 的 loss 值求和.
nn.L1Loss()
nn.MSELoss()
nn.CrossEntropyLoss()
nn.BCELoss()

相关文章

网友评论

      本文标题:【学习】pytorch总结

      本文链接:https://www.haomeiwen.com/subject/apziirtx.html