一、基本概念
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))
运行结果: