在机器学习领域,感知器是一种用于二进制分类器的监督学习算法。 Perceptron模型实现以下函数:
对于权重向量的特定选择和偏差参数 ,模型会预测输出对应的输入向量 。
3位二进制变量(即输入向量)的AND,OR,NAND,NOR门的逻辑函数真值表和相应的输出 –
0 | 0 | 0 | 0 | 0 | 1 | 1 |
0 | 0 | 1 | 0 | 1 | 1 | 0 |
0 | 1 | 0 | 0 | 1 | 1 | 0 |
0 | 1 | 1 | 0 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 | 1 | 1 | 0 |
1 | 1 | 0 | 0 | 1 | 1 | 0 |
1 | 1 | 1 | 1 | 1 | 0 | 0 |
现在为相应的权重向量输入向量的 ,相关的感知器函数可以定义为:
为了实现,考虑的权重参数是偏差参数为对于每个逻辑门
1 | 1 | -1 | -1 | |
1 | 1 | -1 | -1 | |
1 | 1 | -1 | -1 | |
-2 | -0.9 | 3 | 1 |
Python实现:
# importing python library
import numpy as np
# sigmoid activation function
def activationFunction(model, type ="sigmoid"):
return {
"sigmoid": 1 / (1 + np.exp(-model))
}[type]
# designing perceptron model
def perceptronModel(weights, inputs, bias):
model = np.add(np.dot(inputs, weights), bias)
logic = activationFunction(model, type ="sigmoid")
return np.round(logic)
# computation model
def compute(data, logicGate, weights, bias):
weights = np.array(weights)
output = np.array([ perceptronModel(weights,
datum, bias) for datum in data ])
return output
# Print Output
def printOutput(dataset, name, data):
print("Logic Function: {}".format(name.upper()))
print("X1\tX2\tX3\tY")
toPrint = ["{1}\t{2}\t{3}\t{0}".format(output, *datas)
for datas, output in zip(dataset, data)]
for i in toPrint:
print(i)
# main function
def main():
# 3 bit binary data
dataset = np.array([
[0, 0, 0],
[0, 0, 1],
[0, 1, 0],
[0, 1, 1],
[1, 0, 0],
[1, 0, 1],
[1, 1, 0],
[1, 1, 1]
])
# Parameters of every Logic Gates
# weight parameters: w1, w2, w3
# bias parameter: b
logicGate = {
"and": compute(dataset, "and", [1, 1, 1], -2),
"or": compute(dataset, "or", [1, 1, 1], -0.9),
"nand": compute(dataset, "nand", [-1, -1, -1], 3),
"nor": compute(dataset, "nor", [-1, -1, -1], 1)
}
for gate in logicGate:
printOutput(dataset, gate, logicGate[gate])
if __name__ == '__main__':
main()
输出:
Logic Function: AND
X1 X2 X3 Y
0 0 0 0.0
0 0 1 0.0
0 1 0 0.0
0 1 1 0.0
1 0 0 0.0
1 0 1 0.0
1 1 0 0.0
1 1 1 1.0
Logic Function: OR
X1 X2 X3 Y
0 0 0 0.0
0 0 1 1.0
0 1 0 1.0
0 1 1 1.0
1 0 0 1.0
1 0 1 1.0
1 1 0 1.0
1 1 1 1.0
Logic Function: NAND
X1 X2 X3 Y
0 0 0 1.0
0 0 1 1.0
0 1 0 1.0
0 1 1 1.0
1 0 0 1.0
1 0 1 1.0
1 1 0 1.0
1 1 1 0.0
Logic Function: NOR
X1 X2 X3 Y
0 0 0 1.0
0 0 1 0.0
0 1 0 0.0
0 1 1 0.0
1 0 0 0.0
1 0 1 0.0
1 1 0 0.0
1 1 1 0.0
在此,模型的预测输出( ),因为每个测试输入均与AND,OR,NAND,NOR逻辑门的常规输出( )根据3位二进制输入的真值表。
因此,可以证明所有这些逻辑门的感知器算法均已正确实现。