pytorch第一章

pytorch基础知识

张量

张量理解

  • 0维:一个数字;
  • 1维:向量;
  • 2维:矩阵;
  • 3维:时间序列、文本数据、彩色图片
  • 4维:图像
  • 5维:视频

张量常用方法

① 创建一个张量

x = torch.zeros(4, 3, dtype=torch.long)
print(x)

② 加减乘除操作

result = torch.empty(5, 3) 
torch.add(x, y, out=result) 

③ 改变shape

x = torch.randn(4, 4)
z = x.view(-1, 8) # -1是指这一维的维数由其他维度决定

④ 广播机制

  • 当两个shape不相同的tensor进行加法或者其他操作的时候,先进行shape的转变;
x = torch.arange(1, 3).view(1, 2)
print(x)
y = torch.arange(1, 4).view(3, 1)
print(y)
print(x + y)
  • 上面就是把x的1,2变为3,2;把y也变成3,2;

构建模型

nn.Conv2d(256, 384, 3, 1, 1),
nn.ReLU(),
nn.Conv2d(384, 384, 3, 1, 1),
nn.ReLU(),
nn.Conv2d(384, 256, 3, 1, 1),
nn.ReLU(),
nn.MaxPool2d(3, 2)

损失函数

二分类交叉熵损失函数

pytorch第一章_第1张图片

交叉熵损失函数

pytorch第一章_第2张图片

L1损失函数

pytorch第一章_第3张图片

MSE损失函数

pytorch第一章_第4张图片

平滑L1损失函数

pytorch第一章_第5张图片

目标泊松分布的负对数似然损失

torch.nn.PoissonNLLLoss(log_input=True, full=False, size_average=None, eps=1e-08, reduce=None, reduction='mean')

loss = nn.PoissonNLLLoss()
log_input = torch.randn(5, 2, requires_grad=True)
target = torch.randn(5, 2)
output = loss(log_input, target)
output.backward()

KL散度

pytorch第一章_第6张图片

torch.nn.KLDivLoss(size_average=None, reduce=None, reduction='mean', log_target=False)
inputs = torch.tensor([[0.5, 0.3, 0.2], [0.2, 0.3, 0.5]])
target = torch.tensor([[0.9, 0.05, 0.05], [0.1, 0.7, 0.2]], dtype=torch.float)
loss = nn.KLDivLoss()
output = loss(inputs,target)

print('KLDivLoss损失函数的计算结果为',output)

MarginRankingLoss

torch.nn.MarginRankingLoss(margin=0.0, size_average=None, reduce=None, reduction='mean')
loss = nn.MarginRankingLoss()
input1 = torch.randn(3, requires_grad=True)
input2 = torch.randn(3, requires_grad=True)
target = torch.randn(3).sign()
output = loss(input1, input2, target)
output.backward()

print('MarginRankingLoss损失函数的计算结果为',output)

多标签边界损失函数

torch.nn.MultiLabelMarginLoss(size_average=None, reduce=None, reduction='mean')
loss = nn.MultiLabelMarginLoss()
x = torch.FloatTensor([[0.9, 0.2, 0.4, 0.8]])
# for target y, only consider labels 3 and 0, not after label -1
y = torch.LongTensor([[3, 0, -1, 1]])# 真实的分类是,第3类和第0类
output = loss(x, y)

print('MultiLabelMarginLoss损失函数的计算结果为',output)

二分类损失函数

torch.nn.SoftMarginLoss(size_average=None, reduce=None, reduction='mean')torch.nn.(size_average=None, reduce=None, reduction='mean')
inputs = torch.tensor([[0.3, 0.7], [0.5, 0.5]])  # 两个样本,两个神经元
target = torch.tensor([[-1, 1], [1, -1]], dtype=torch.float)  # 该 loss 为逐个神经元计算,需要为每个神经元单独设置标签

loss_f = nn.SoftMarginLoss()
output = loss_f(inputs, target)

print('SoftMarginLoss损失函数的计算结果为',output)

多分类的折页损失

torch.nn.MultiMarginLoss(p=1, margin=1.0, weight=None, size_average=None, reduce=None, reduction='mean')
inputs = torch.tensor([[0.3, 0.7], [0.5, 0.5]]) 
target = torch.tensor([0, 1], dtype=torch.long) 

loss_f = nn.MultiMarginLoss()
output = loss_f(inputs, target)

print('MultiMarginLoss损失函数的计算结果为',output)

HingEmbeddingLoss

torch.nn.HingeEmbeddingLoss(margin=1.0, size_average=None, reduce=None, reduction='mean')
loss_f = nn.HingeEmbeddingLoss()
inputs = torch.tensor([[1., 0.8, 0.5]])
target = torch.tensor([[1, 1, -1]])
output = loss_f(inputs,target)

print('HingEmbeddingLoss损失函数的计算结果为',output)

CTC损失函数(时序问题分类)

torch.nn.CTCLoss(blank=0, reduction='mean', zero_infinity=False)

优化器

  • torch.optim.ASGD
  • torch.optim.Adadelta
  • torch.optim.Adagrad
  • torch.optim.Adam
  • torch.optim.AdamW
  • torch.optim.Adamax
  • torch.optim.LBFGS
  • torch.optim.RMSprop
  • torch.optim.Rprop
  • torch.optim.SGD
  • torch.optim.SparseAdam

模型定义

方法一

pytorch第一章_第7张图片

方法二

pytorch第一章_第8张图片

方法三

pytorch第一章_第9张图片

方法四

pytorch第一章_第10张图片

模型保存

单卡,多卡
保存,加载

  • 可以自由组合,并根据不同情况操作

你可能感兴趣的:(深度学习,pytorch,深度学习,机器学习)