DL之Perceptron:感知器(多层感知机/人工神经元)的原理之基于numpy定义2层感知机底层逻辑代码(与门AND/与非门NAND/或门OR是)解决XOR异或问题之详细攻略

Posted 一个处女座的程序猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DL之Perceptron:感知器(多层感知机/人工神经元)的原理之基于numpy定义2层感知机底层逻辑代码(与门AND/与非门NAND/或门OR是)解决XOR异或问题之详细攻略相关的知识,希望对你有一定的参考价值。

DL之Perceptron:感知器(多层感知机/人工神经元)的原理之基于numpy定义2层感知机底层逻辑代码(与门AND/与非门NAND/或门OR是)解决XOR异或问题之详细攻略

目录

感知器(多层感知机/人工神经元)的原理之基于numpy定义2层感知机底层逻辑代码(与门AND/与非门NAND/或门OR是)解决XOR异或问题

设计思路

输出结果

代码实现


感知器(多层感知机/人工神经元)的原理之基于numpy定义2层感知机底层逻辑代码(与门AND/与非门NAND/或门OR是)解决XOR异或问题

设计思路

# 1、最初的感知机设计
      # 仅包含与门——即AND()函数:当输入的加权总和超过阈值时返回1,否则返回0
# 2、进阶的感知机设计:带有权重w、偏置b概念形式的三种门实现
            #(1)、与门、与非门、或门是具有相同构造的感知机,区别只在于权重参数的值。
            #(2)、w1、w2是控制输入信号的重要性的参数,而偏置是调整神经元被激活的容易程度(输出信号为1 的程度)的参数。但是根据上下文,有时也会将b、w1、w2 这些参数统称为权重。
      # 2.1、设计AND门
      # 2.2、设计NAND门
            # 仅权重和偏置与AND不同!
      # 2.3、设计OR门
      # 2.4、利用两层感知机实现异或门
            #(1)、异或门是一种多层结构的神经网络。这里,将最左边的一列称为第0 层,中间的一列称为第1 层,最右边的一列称为第2层。

输出结果

P_AND(0, 0): 0
P_AND(1, 0): 0
P_AND(0, 1): 0
P_AND(1, 1): 1
XOR(0, 0): 0
XOR(1, 0): 1
XOR(0, 1): 1
XOR(1, 1): 0

代码实现


# DL之Perceptron:Perceptron感知器(感知机/多层感知机/人工神经元)的原理之基于numpy定义2层感知机底层逻辑代码(与门AND/与非门NAND/或门OR是)解决XOR异或问题之详细攻略



import numpy as np


# 1、最初的感知机设计
# 仅包含与门——即AND()函数:当输入的加权总和超过阈值时返回1,否则返回0
def P_AND(x1, x2):
    w1, w2, theta = 0.5, 0.5, 0.7
    tmp = x1*w1 + x2*w2
    if tmp <= theta:
        return 0
    elif tmp > theta:
        return 1
 
print('P_AND(0, 0):',P_AND(0, 0)) # 输出0
print('P_AND(1, 0):',P_AND(1, 0)) # 输出0
print('P_AND(0, 1):',P_AND(0, 1)) # 输出0
print('P_AND(1, 1):',P_AND(1, 1)) # 输出1
 
 
# 2、进阶的感知机设计:带有权重w、偏置b概念形式的三种门实现
#(1)、与门、与非门、或门是具有相同构造的感知机,区别只在于权重参数的值。
#(2)、w1、w2是控制输入信号的重要性的参数,而偏置是调整神经元被激活的容易程度(输出信号为1 的程度)的参数。但是根据上下文,有时也会将b、w1、w2 这些参数统称为权重。

# 2.1、设计AND门
def AND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

# 2.2、设计NAND门
def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5]) # 仅权重和偏置与AND不同!
    b = 0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

# 2.3、设计OR门
def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])  # 仅权重和偏置与AND不同!
    b = -0.2
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1
 
 
# 2.4、利用两层感知机实现异或门
#(1)、异或门是一种多层结构的神经网络。这里,将最左边的一列称为第0 层,中间的一列称为第1 层,最右边的一列称为第2层。
def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y


print('XOR(0, 0):',XOR(0, 0)) # 输出0
print('XOR(1, 0):',XOR(1, 0)) # 输出1
print('XOR(0, 1):',XOR(0, 1)) # 输出1
print('XOR(1, 1):',XOR(1, 1)) # 输出0

以上是关于DL之Perceptron:感知器(多层感知机/人工神经元)的原理之基于numpy定义2层感知机底层逻辑代码(与门AND/与非门NAND/或门OR是)解决XOR异或问题之详细攻略的主要内容,如果未能解决你的问题,请参考以下文章

Theano Multi Layer Perceptron 多层感知机

sklearn MLP(多层感知机Multi-layer Perceptron)模型使用RandomSearchCV获取最优参数及可视化

R语言使用caret包构建多层感知机MLP(Multi-Layer Perceptron )构建回归模型通过method参数指定算法名称通过trainControl函数控制训练过程

感知机的梯度推导

CNNRNNDNN

感知机(Perceptron)