Hello World感知机,懂你我心才安息

 

标题来自张玉宏老师书的目录《深度学习之美》

单层神经网络

把一个多元一次方程(需要拟合的目标方程)画为神经网络

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

神经元:1、x1、x2每个圈为一个神经元

输入层:1、x1、x2整体为输入层,神经网络中输入层永远只有一层,且每个神经元只能有一个特征

输出层:在线性回归中输出层起着加和的作用

正向传播:输入层上每个神经元的特征与对应连线上的权重相乘,最后由输出层汇总结果

手动实现正向传播

import torch
X = torch.tensor([[1,0,0],[1,1,0],[1,0,1],[1,1,1]], dtype = torch.float32)
# tensor([[1., 0., 0.],
#         [1., 1., 0.],
#         [1., 0., 1.],
#         [1., 1., 1.]])
w = torch.tensor([-0.2,0.15,0.15], dtype = torch.float32)
# tensor([-0.2000,  0.1500,  0.1500])

输出层的结果为

zhat=torch.mv(X,w)
# tensor([-0.2000, -0.0500, -0.0500,  0.1000])

torch.nn.Linear实现正向传播

import torch
X = torch.tensor([[0,0],[1,0],[0,1],[1,1]], dtype = torch.float32)
# tensor([[0., 0.],
#         [1., 0.],
#         [0., 1.],
#         [1., 1.]])
torch.random.manual_seed(0)
output = torch.nn.Linear(2,1)
zhat=output(X)

对torch.nn.Linear类实例化,需要输入两个参数,上一层的神经元个数这一层的神经元个数。因为输入层特征矩阵X只有两个特征,所以上一层的神经元个数=2,这一层是输出层只有一个神经元所以这一层的神经元个数=1

在实例化中,会自动生成神经连接上的权重w和截距b,但因为是随机生成的需要设置随机数,确保每次运行都生成相同的权重w和截距b。

但是因为w和b是随机生成的所以输出层的结果zhat和手动算的不一样,这只是为了演示正向传播过程。神经网络需要通过多次

感知机处理2分类问题

上边的神经网络只能处理回归问题,而不能给出具体的分类,因此需要在输出层增加一个离散函数,根据数值大小把zhat分为不同的分类。

感知机是单层神经网络,输出层使用sign(阶跃函数、符号函数)对zhat处理,从而得到2分类输出结果

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1与门问题

与门问题,即X的第二列和第三列取逻辑and得到的结果0,0,0,1,需要用感知机预测这个2分类问题

import torch
X = torch.tensor([[1,0,0],[1,1,0],[1,0,1],[1,1,1]], dtype = torch.float32)
# tensor([[1., 0., 0.],
#         [1., 1., 0.],
#         [1., 0., 1.],
#         [1., 1., 1.]])
w = torch.tensor([-0.2,0.15,0.15], dtype = torch.float32)

输出层的结果为,因为感知机使用的是sign函数,返回的结果是-1和1代表了两个分类,那么这里的-1就是0即False而1代表1即True

zhat = torch.mv(X,w)
# tensor([-0.2000, -0.0500, -0.0500,  0.1000])
output = torch.sign(zhat)
# tensor([-1., -1., -1.,  1.])

那么权重w是怎么得到的呢,可以使用梯度下降方法通过迭代找到损失函数最小值,从而得到w

 

相关推荐

  1. 破解视频会员(

    2024-06-08 20:52:02       16 阅读
  2. 的创作纪念日:感恩感谢感激

    2024-06-08 20:52:02       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-08 20:52:02       5 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-08 20:52:02       5 阅读
  3. 在Django里面运行非项目文件

    2024-06-08 20:52:02       4 阅读
  4. Python语言-面向对象

    2024-06-08 20:52:02       7 阅读

热门阅读

  1. arm和x86的差别和应用场景学习笔记

    2024-06-08 20:52:02       17 阅读
  2. VUE3 表单输入绑定

    2024-06-08 20:52:02       19 阅读
  3. qt网络事件之QSocketNotifier

    2024-06-08 20:52:02       17 阅读
  4. vscode Run Code输出出现中文乱码情况问题解决方案

    2024-06-08 20:52:02       13 阅读
  5. Facebook海外户&Facebook广告被暂停的原因

    2024-06-08 20:52:02       16 阅读
  6. [知识点]c++运算符重载

    2024-06-08 20:52:02       13 阅读
  7. 模型训练——使用预训练权重、冻结训练

    2024-06-08 20:52:02       20 阅读
  8. 两段代码想编译其中一段

    2024-06-08 20:52:02       14 阅读
  9. 在IDEA中使用git分支进行开发然后合并到Master分支

    2024-06-08 20:52:02       14 阅读
  10. ros常用环境变量

    2024-06-08 20:52:02       13 阅读
  11. 递归及其使用

    2024-06-08 20:52:02       16 阅读