深度学习02-分类问题
·
1. 二分类单层神经网络(逻辑回归)
很多时候,我们用神经网络拟合的时候,不仅有回归问题,有时候也用来进行分类。
分类问题:本质也可以认为也是回归问题,只是把我们最后的输出,使用sigmoid函数进行了分类。


使用sigmoid函数,我们可以自己设定阈值,当大于阈值的时候,我们认为是结果A, 小于阈值时候,结果是B。 因为sigmoid函数的取值区间是(0, 1),所以我们可以方便的设定阈值,然后进行分类。
1.1 最简单的分类
步骤:前向传播–> 对结果添加sigmoid
import torch
X = torch.tensor([[1, 1, 2], [1, 2, 3], [2, 3, 1], [0, 1, 2]], dtype=torch.float)
w = torch.tensor([[1], [-2], [3]], dtype=torch.float)
def logsticR(X, w):
yhat = X @ w
# 手写sigmoid
yhat = 1/(1+torch.exp(-yhat))
# 对结果进行转换,当大于0.5时候,就是1,否则就是0
ysig = [int(i) for i in yhat > 0.5]
return yhat, ysig
y, ysig = logsticR(X, w)
print(y)
print(ysig)
同样的,我们也可以调用torch现成的函数直接运算
def LogsticR(X, w):
yhat = torch.sigmoid(X @ w)
ysig = torch.round(yhat)
return yhat, ysig
y, ysig = LogsticR(X, w)
print(y)
print(ysig)
1.2 其他分类函数
sign, Tanh, ReLu
通常,我们在分类的时候,输出使用sigmoid函数
tanh函数通常用于神经网路的隐藏层
sign函数符号函数

处理的代码,和上面的代码一模一样,只是修改了阈值。
1.3 nn.function库
神经网络总所需的大部分的激活函数,都在这个库中.
注意:在使用nn.function中的内容的时候,传入的参数必须是 tensor
from torch.nn import functional as F
import torch
y = F.sigmoid(torch.tensor([1, 2]))
y = F.tanh(torch.tensor([1, 2, 3]))
print(y)
注意:
很多函数,在torch中,都有进行实现。即我们可以直接使用torch.xxx进行调用。
import torch
y = torch.sigmoid(torch.tensor([1, 2]))
y = torch.tanh(torch.tensor([1, 2, 3]))
print(y)
对比:其实 两个是一模一样的,本质都是调用了 F.sigmoid函数,计算的方式和结果没有区别。只是torch中,会包含更多的内容,比如torch.sign符号函数等。
2. 多分类单层神经网络
对于二分类,其实很容易扩展到多分类中。只是最后的输出函数不同,前面的训练流程都是一模一样的。
多分类问题中,我们使用softmax函数进行分类。 可以认为softmax函数,输出的结果也是概率。把概率最大的作为最后的结果。

更多推荐


所有评论(0)