【自学】深度学习入门 基于python的理论与实现 LESSON1 <感知机的实现>

目录

前言

一、感知机是什么

二、感知机的实现

1.使用权重和偏置实现与门、非们、与非门

2.感知机的局限性(异或门)

总结


前言

感知机是神经网络的起源算法,本节用感知机解决一些简单问题


一、感知机是什么

(1)感知机接收多个输入信号、输出一个信号。

(2)感知机的信号只有0/1两种取值,本人默认为0表示不传递信号、1表示传递信号

(3)权重越大,对应的信号重要性越高。可以将权重类比为电阻。

二、感知机的实现

1.使用权重和偏置实现与门、非们、与非门

代码:此代码为与门

import numpy as np

results = []
def AND(x_1, x_2):
    x_1 = np.array(x_1)
    x_2 = np.array(x_2)
    b = -0.7
    tmp = x_1 * 0.5 + x_2 * 0.5 + b
    for i in tmp:
        if i <= 0:
            result = 0
            results.append(result)
        else:
            result = 1
            results.append(result)
    return results

output = AND([1, 0, 1], [0, 1, 1])
print(output)

结果:

[0, 0, 1]

 注意:

(1)偏置和权重的作用是不一样的:权重是控制输入信号的参数(w1, w2),偏置是调整神经元被激活的容易程度(输出信号为1的程度)的参数。

(2)与门、与非门、或门具有相同结构的感知机,区别只在于权重和偏置参数的值。

2.感知机的局限性(异或门)

想要实现异或门,单独的感知机是不能实现的,需要多个感知机的叠加。异或门的电路组合如图所示:

代码:

import numpy as np

and_results = []
nand_results = []
or_results = []

def AND(x_1, x_2):
    x_1 = np.array(x_1)
    x_2 = np.array(x_2)
    b = -0.7
    and_result = x_1 * 0.5 + x_2 * 0.5 + b
    for i in and_result:
        if i <= 0:
            result_1 = 0
            and_results.append(result_1)
        else:
            result_1 = 1
            and_results.append(result_1)
    return and_results

def NAND(x_1, x_2):
    x_1 = np.array(x_1)
    x_2 = np.array(x_2)
    nand_result = x_1 * (-0.5) + x_2 * (-0.5) + 0.7
    for o in nand_result:
        if o <= 0:
            result_2 = 0
            nand_results.append(result_2)
        else:
            result_2 = 1
            nand_results.append(result_2)
    return nand_results

def OR(x_1, x_2):
    x_1 = np.array(x_1)
    x_2 = np.array(x_2)
    or_result = x_1 * 0.5 + x_2 * 0.5 - 0.2
    for p in or_result:
        if p <= 0:
            result_3 = 0
            or_results.append(result_3)
        else:
            result_3 = 1
            or_results.append(result_3)
    return or_results

def XOR(x_1, x_2):
    s1 = NAND(x_1, x_2)
    s2 = OR(x_1, x_2)
    y = AND(s1, s2)
    return y

output = XOR([1, 1, 0, 1], [0, 1, 0, 1])
print(output)

结果:

[1, 0, 0, 0]

注意:

(1)使用两层感知机可以表示异或门

(2)单层感知机只能表示线性空间,多层感知机可以表示非线性空间。

(3)多层感知机理论上可以表示计算机


总结

感知机是一种非常简单的算法,是神经网络的基础。下一节我会学习神经网络。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Rachel MuZy

你的鼓励是我的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值