单层感知机实现布尔函数,附代码

单层感知机

单层感知器属于单层前向网络,即除输入层和输出层之外,只拥有一层神经元节点。

特点:输入数据从输入层经过隐藏层向输出层逐层传播,相邻两层的神经元之间相互连接,同一层的神经元之间没有连接。

感知器(perception)是由美国学者F.Rosenblatt提出的。与最早提出的MP模型不同,神经元突触权值可变,因此可以通过一定规则进行学习。可以快速、可靠地解决线性可分的问题。

简介

单层感知器由一个线性组合器和一个二值阈值元件组成。输入向量的各个分量先与权值相乘,然后在线性组合器中进行叠加,得到一个标量结果,其输出是线性组合结果经过一个二值阈值函数。二值阈值元件通常是一个上升函数,典型功能是非负数映射为1,负数映射为0或负一。

函数表达

在这里插入图片描述

布尔函数

给定三个布尔输入变量x1,x2,x3,一个输出变量Y,三个输入变量中至少有两个是0时, 输出为-1;至少有两个大于0时,输出为1。

感知机示意图

在这里插入图片描述

图象

折线图方便观察,实际只有对应点

代码

# -*- coding: utf-8 -*-
"""
Created on Wed Oct  9 22:40:39 2019

@author: C
"""

import pandas as pd 
import numpy as np

def node (inputs, weights, T):
    result = np.dot(inputs, weights)-T
    result_ = pd.DataFrame(result)[0].map(lambda x:0 if x<0 else 1)
    graph = pd.DataFrame(np.vstack((result, np.array(result_)))).T
    return graph


inputs = np.random.uniform(-1, 1, (20,3))
weights = np.array([0.3, 0.3, 0.3]).T
T=0.4

graph = node (inputs, weights, T).rename(columns={0:'input',1:'output'})
graph.plot()

写在最后:

Il n’ya qu’un héroïsme au monde : c’est de voir le monde tel qu’il est et de l’aimer." Romain Rolland.

单层感知机无法解决异或门问题,因为异或门不是线性可分的。但是,可以通过堆叠多个单层感知机实现多层感知机,从而解决异或门问题。 具体地,可以使用一个含有个隐层节点的感知机实现异或门函数。其中,第一层由单层感知机组成,每个单层感知机输入节点和一个输出节点;第二层仅有一个输出节点,它的输入是第一层的输出。具体的实现如下: 1. 对于输入为 (0,0) 或 (1,1),输出为 0; 2. 对于输入为 (0,1) 或 (1,0),输出为 1。 其中,第一层的单层感知机的权重和阈值如下所示: 对于第一个单层感知机输入为 $x_1$ 和 $x_2$,输出为 $y_1$): $w_{11} = -1, w_{12} = 1, \theta_1 = 0$ 对于第二个单层感知机输入为 $x_1$ 和 $x_2$,输出为 $y_2$): $w_{21} = 1, w_{22} = -1, \theta_2 = 0$ 第二层的输出节点的权重和阈值如下所示: $w_{31} = 1, w_{32} = 1, \theta_3 = -1.5$ 其中,$w_{ij}$ 表示连接第 $i$ 层的第 $j$ 个节点和第 $i+1$ 层的第 $j$ 个节点的权重,$\theta_i$ 表示第 $i$ 层的阈值。 这样,当输入为 (0,0) 或 (1,1) 时,第一层的单层感知机的输出均为 0,第二层的输出节点的输入为 0,因此输出为 0;当输入为 (0,1) 或 (1,0) 时,第一层的单层感知机的输出分别为 1 和 -1,第二层的输出节点的输入为 0,因此输出为 1。 这样,就实现了异或门函数的定义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值