神经网络的简单实现

同或逻辑运算

        在吴恩达的机器学习教程中,讲解了同或逻辑运算的神经网络实现原理,我将其用python语言实现一下。异或即相同取1,不同取0,真值表如下:

x1x2x1 XNOR x2
001
100
010
111

神经网络的设计

        同或运算的神经网络包括三层:输入层、隐藏层、输出层。首先需要实现以下三个部分:

        (1)x1 AND x2

        与运算的真值表如下:

x1x2x1 AND x2
000
100
010
111

        使用神经网络来实现的话,其权重矩阵为:[-30,20,20]。示意图如下:

        假设输入的x1和x2为[1,0],加上偏置项后与权重向量相乘:1*(-30)+1*20+0*20=(-10),而-10经过激活函数后输出近似为0。假设输入的是[1,1],加上偏置项后与权重向量相乘:1*(-30)+1*20+1*20=10,经过激活函数后输出近似为1,这样就实现了与运算。

        (2)(NOT x1) AND (NOT x2)

        该运算的真值表如下:

x1x2(NOT x1) AND (NOT x2)
001
100
010
110

 

        使用神经网络来实现,其权重矩阵为:[10,-20,-20]。示意图如下:

        假设输入的x1和x2为[0,0],加上偏置项后与权重向量相乘:1*10+0*(-20)+0*(-20)=10,经激活函数后输出近似为1。假设输入的为[1,0],加上偏置项后与权重向量相乘:1*10+1*(-20)+0*(-20)=-10,经激活函数后输出近似为0。

        (3)x1 OR x2。

        或运算的真值表如下:

x1x2x1 OR x2
000
101
011
111

 

        使用神经网络来实现,其权重矩阵为:[-10,20,20],示意图如下:

        假设输入的x1和x2为[0,0],加上偏置项后与权重向量相乘:1*(-10)+0*20+0*20=(-10),经激活函数后输出近似为0;假设输入的是[1,1],加上偏置项后与权重向量相乘:1*(-10)+1*20+1*20=30,经激活函数后输出近似为1。 


神经网络的实现

        将上述实现的三个部分组合起来,如下图所示:

        神经网络中的三个参数矩阵分别对应了上面实现的三个神经网络的参数矩阵。其计算过程为:

x1x2a1a2h(x)
00011
10000
01000
11101

 


python实现

        在将一个单元的输出作为另一个单元的输入时,由于激活函数的影响,输出的值并不是准确的0或1,而直接使用python中的int()函数会将数值的小数部分直接舍掉。这时可以用计算机中的四舍五入来将其规范为整数值,即int(x+0.5)。

import numpy as np

# 激活函数
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

class Neuron():
    def __init__(self, weights1,weights2,weights3):
        self.weights1=weights1
        self.weights2=weights2
        self.weights3=weights3

    def XNOR(self, inputs):
        inputs=np.insert(inputs,0,1)
        a1=np.dot(self.weights1,inputs)
        a2=np.dot(self.weights2,inputs)
        g=[1,int(sigmoid(a1)+0.5),int(sigmoid(a2)+0.5)]
        b=np.dot(self.weights3,g)
        return sigmoid(b)


weights1 = np.array([-30,20,20])
weights2 = np.array([10,-20,-20])
weights3 = np.array([-10,20,20])
n = Neuron(weights1,weights2, weights3)

# inputs
x = np.array([0,0])
print(n.XNOR(x))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值