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函数,输出的结果也是概率。把概率最大的作为最后的结果。
在这里插入图片描述

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐