📌  相关文章
📜  2位二进制输入与非逻辑门感知器算法的实现(1)

📅  最后修改于: 2023-12-03 15:29:11.306000             🧑  作者: Mango

2位二进制输入与非逻辑门感知器算法的实现

简介

感知器是一种二元分类器,可用于将输入数据分为两个类别。其中最简单的是二元逻辑感知器,可以实现与、或和非等逻辑运算。而与非逻辑门是最基本的逻辑门之一,可以用于实现其他逻辑门。本文将介绍如何使用2位二进制输入实现与非逻辑门感知器算法。

感知器算法

感知器算法基于神经元模型,其输入是一组特征,输出是对应输入的分类。感知器算法的核心是权重更新算法,即利用误差反向传播算法来不断调整权重,使得输出输出准确率逐渐增加。与非逻辑门感知器算法需要两个输入,因此需要有两组权重系数,分别对应两个输入。具体实现如下:

import numpy as np

class AndNotPerceptron:
    def __init__(self):
        self.weights1 = np.random.rand(2)
        self.weights2 = np.random.rand(2)
        self.bias1 = np.random.rand(1)
        self.bias2 = np.random.rand(1)
    
    def activation(self, x):
        return 1 if x>0 else -1
        
    def predict(self, input1, input2):
        out1 = self.activation(np.dot(self.weights1, [input1, input2]) + self.bias1)
        out2 = self.activation(np.dot(self.weights2, [input1, input2]) + self.bias2)
        if out1 == 1 and out2 == -1:
            return 1
        else:
            return -1
        
    def train(self, inputs, targets, epochs):
        for _ in range(epochs):
            for input_set, label in zip(inputs, targets):
                prediction = self.predict(input_set[0], input_set[1])
                error = label - prediction
                self.weights1 += error * input_set * 0.1
                self.weights2 += error * input_set * 0.1
                self.bias1 += error * 0.1
                self.bias2 += error * 0.1

在类的初始化函数中,定义了两组随机的权重系数和偏置量。activation()函数是感知器的激活函数,使用符号函数来将实数映射为1或-1。predict()函数输入两个二进制值,并输出与非逻辑门的结果。其中out1和out2对应两个输入的感知器输出,具体输出公式为$y=\sum_{i=1}^{n} w_ix_i+b$,其中$w_i$对应权重系数,$x_i$对应输入值,b对应偏置量。在训练阶段,使用输入数据和期望输出数据来训练权重系数和偏置量。

使用示例
inputs = np.array([[0,0],[0,1],[1,0],[1,1]])
targets = np.array([-1,-1,-1,1])

andnot = AndNotPerceptron()
andnot.train(inputs, targets, 10)

print(andnot.predict(0, 0))  # 输出-1
print(andnot.predict(0, 1))  # 输出-1
print(andnot.predict(1, 0))  # 输出-1
print(andnot.predict(1, 1))  # 输出1

定义四组二元数据,分别对应两个输入的四种组合情况。期望输出的结果为对应输入的与非逻辑门的值。实例化AndNotPerceptron对象,并使用train()函数进行训练。训练结束后,可以使用predict()函数预测两个二进制输入的与非逻辑门的值,最终输出结果为-1或1。

总结

本文介绍了使用2位二进制输入实现与非逻辑门感知器算法的实现过程。感知器算法可以用于分类问题,其核心是权重更新。与非逻辑门感知器就是一种二元分类问题,通过训练可以得到准确的分类结果。需要注意的是,训练集的选择和训练轮数对训练结果有一定影响。