菜菜的深度学习笔记 | 基于Python的理论与实现(一)—> 感知机与神经网络

在这里插入图片描述

系列索引:菜菜的深度学习笔记 | 基于Python的理论与实现

第一章 Python基础

(1)Python库 — numpy、matplotlib

下面通过一个例子来了解Python两个重要库的使用。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 6, 0.1)
y1 = np.sin(x)
y2 = np.cos(x)

plt.plot(x, y1, label="sin")
plt.plot(x, y2, linestyle="--", label="cos") #设置参数
plt.xlabel("x") #设置标签
plt.ylabel("y") 
plt.title('sin&cos')
plt.legend()
plt.show()

在这里插入图片描述

第二章 感知机

我的理解:感知机就是通过分割实现分类,单层感知机是一条直线,多层感知机是多条直线叠加。
img

(1)从门电路了解感知机

与门的实现:

def AND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.7 #偏置
    tmp = np.sum(w*x)+b
    return 0 if tmp <= 0 else 1

非门的实现:

def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5])
    b = 0.7 #偏置
    tmp = np.sum(w*x)+b
    return 0 if tmp <= 0 else 1

或门的实现:

def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.2
    tmp = np.sum(w*x)+b
    return 0 if tmp <= 0 else 1

1、感知机的局限性

感知机可以实现与门、与非门、或门,但不能实现异或门。因为感知机相当于在二维坐标系中画出一条直线来区分各点。

2、线性空间与非线性空间
由直线分割形成的空间成为线性空间,由曲线形成的空间称为非线性空间。

img

(2)多层感知机

类比数电中与非门的构成,由基础门电路叠加组成。
下面我们由基础门电路实现与非门

import numpy as np

def AND(x1, x2):
    w1, w2, theta = 0.5, 0.5, 0.7
    tmp = x1*w1+x2*w2
    return 0 if tmp <= theta else 1

def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5])
    b = 0.7
    tmp = np.sum(w*x)+b
    return 0 if tmp <= 0 else 1

def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.2
    tmp = np.sum(w*x)+b
    return 0 if tmp <= 0 else 1

def XOR(x1, x2): #实现与非门
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y

if __name__ == '__main__':
    print(XOR(1, 1))

单层感知机无法表示的东西,通过增加一层就可以解决。感知机具有很好的灵活性
在这里插入图片描述

使用多层感知机理论构造计算机:

与或门 ->半全加器->ALU->CPU

第三章 神经网络

(1)感知机与神经网络

通过对感知机的了解我们知道理论上它可以表示更复杂的函数甚至计算机,但其设定权重的工作仍是人工处理,神经网络可以解决这一问题。

(2)什么是神经网络?

和感知机类似,可以分为三层:输入层、中间层、输出层,其中中间层也叫隐藏层

神经网络

感知机中的函数:
y = { 0   , ( b + w 1 x 1 + w 2 x 2 < = 0 ) 1   , ( b + w 1 x 1 + w 2 x 2 < = 0 ) y= \begin{cases} 0\ , &(b+w1x1+w2x2<=0) \\ \\ 1\ , &(b+w1x1+w2x2<=0) \end{cases} y=0 ,1 ,(b+w1x1+w2x2<=0)(b+w1x1+w2x2<=0)
b是表示偏置,用于控制神经元被激活的容易程度

w表示各个信号的权重的参数,用于控制各个信号的重要性

可将上式改为更简洁的形式:
y = h ( b + w 1 x 1 + w 2 x 2 ) h ( x ) = { 0   , ( x < = 0 ) 1   , ( x > 0 ) y=h(b+w1x1+w2x2) \\ h(x)= \begin{cases} 0\ , &(x<=0) \\ \\ 1\ , &(x>0) \end{cases} y=h(b+w1x1+w2x2)h(x)=0 ,1 ,(x<=0)(x>0)

(3)激活函数

刚才的h(x)函数会将输入信号的总和转换为输出信号,这种函数就是激活函数,激活函数是连接感知机和神经网络的桥梁。

朴素感知机:单层网络,指的是激活函数使用了阶跃函数(指一旦输入超过阈值就切换输出的函数)的模型

多层感知机:神经网络,即使用sigmoid函数等平滑的激活函数的多层网络

未完待续...

基于Python的理论与实现 系列持续更新,欢迎点赞收藏关注

上一篇:菜菜的并发编程笔记 |(九)异步IO实现并发爬虫加速
下一篇:菜菜的深度学习笔记 | 基于Python的理论与实现(二)

本人水平有限,文章中不足之处欢迎下方👇评论区批评指正~

如果感觉对你有帮助,点个赞👍 支持一下吧 ~

不定期分享 有趣、有料、有营养内容,欢迎 订阅关注 🤝 我的博客 ,期待在这与你相遇 ~

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿知

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值