深度学习入门第一课—感知机(1)

一、基本概念

1、感知机接收多个输入信号,输出一个信号;

2、水流与电流向前流动,向前输送水与电子;

3、感知机的信号也会形成流,向前输送信息;

4、感知机的信号只有“流/不流”即“0/1”两种取值可能;

示例图:输入信号:X1、X2;权重:W1、W2;神经元:○

       当神经元接收到输入信号X1与X2时,会分别乘以各自权重W1与W2并求和,只有当总和超过某个限值时才会输出“1”,而界限值被称为“阈值Θ”,同时称这个“神经元被激活”

公式:

注:①、权重越大,输出信号的输出值越大,该权重的重要性越高,该神经元越容易被激活。

       ②、权重可以比作电阻,当信号(电流)经过权重越大(电阻越小)时通过的信号越大

           (通过的电流越大)。

二、“与门”、“与非门”和“或门”

2.1、“与门”(AND gate)

2.1.1、基本概念

同时为真才为真;

思考:什么数值的W1、W2与Θ才能实现“与门”?

解:                                                         当 X1 = 0 , X2 = 0

W1X1 + W2X2 = 0  <  Θ

                                                                 当 X1 = 1 , X2 = 0

W1X1 + W2X2 = W1  <  Θ

                                                                 当 X1 = 0 , X2 = 1

W1X1 + W2X2 = W2  <  Θ

   当 X1 = 1 , X2 = 1

W1X1 + W2X2 = W1+W2  >  Θ

满足这样条件的权重与阈值有很多种,比如(W1, W2, Θ)=(0.5, 0.5, 0.8)

代码:(b = -Θ)

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

2.1.2、偏置b

为了以后操作方便,把式中的θ换成−b,则表达式:

代码实现“与门”:

import numpy as np

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

if __name__ == '__main__':
    # 这段代码是Python中常见的用于判断当前脚本是否作为主程序运行的条件语句。
    # __name__ 是一个特殊的内置变量,它表示当前模块的名称。
    # 当一个Python脚本被直接运行时,__name__ 的值会被设置为'__main__';
    # 而当一个脚本作为模块被导入时,__name__ 的值会被设置为模块的名称。
    # 这行代码的意思是:如果当前脚本作为主程序运行(而不是被导入为模块),则执行下面的代码块。
    for zz in [(0, 0), (1, 0), (0, 1), (1, 1)]:
        y = AND(zz[0], zz[1])
        print(str(zz) + " -> " + str(y))
        # str(zz)将变量zz的值转换为字符串;
        # " -> "是一个字符串,表示一个箭头符号

运行结果:

2.2、与非门(NAND gate)

有0则为输出1;

思考:什么数值的W1、W2与Θ才能实现“与非门”?

解:将与门代码取反即可

                                                                 当 X1 = 0 , X2 = 0

W1X1 + W2X2 = 0  >  Θ

                                                                 当 X1 = 1 , X2 = 0

W1X1 + W2X2 = W1  >  Θ

                                                                 当 X1 = 0 , X2 = 1

W1X1 + W2X2 = W2  >  Θ

   当 X1 = 1 , X2 = 1

W1X1 + W2X2 = W1+W2  <  Θ

满足这样条件的权重与阈值有很多种,比如(W1, W2,Θ)=(-0.5, -0.5, -0.8)

代码:(b = -Θ)

import numpy as np

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

2.2.2、偏置b

为了以后操作方便,把式中的θ换成−b,则表达式:

代码实现“与非门”:

import numpy as np

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

if __name__ == '__main__':
    for zz in [(0, 0), (1, 0), (0, 1), (1, 1)]:
        y = NAND(zz[0], zz[1])
        print(str(zz) + " -> " + str(y))

运行结果:

2.3、或门(OR gate)

2.3.1、基本概念

有1则输出为1;

思考:什么数值的W1、W2与Θ才能实现“或门”?

                                                                当 X1 = 0 , X2 = 0

W1X1 + W2X2 = 0  <  Θ

                                                                 当 X1 = 1 , X2 = 0

W1X1 + W2X2 = W1  >  Θ

                                                                 当 X1 = 0 , X2 = 1

W1X1 + W2X2 = W2  >  Θ

   当 X1 = 1 , X2 = 1

W1X1 + W2X2 = W1+W2  >  Θ

满足这样条件的权重与阈值有很多种,比如(W1, W2, Θ)=(0.5, 0.5, 0.4)

代码:(b = - Θ)

import numpy as np

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

2.3.2、偏置b

为了以后操作方便,把式中的θ换成−b,则表达式:

代码实现“或门”:

import numpy as np

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

if __name__ == '__main__':
    for zz in [(0, 0), (1, 0), (0, 1), (1, 1)]:
        y = OR(zz[0], zz[1])
        print(str(zz) + " -> " + str(y))

运行结果:

  • 25
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值