深度学习入门之线性神经网络解决异或问题

本文介绍了深度学习的基础概念,并通过实例详细讲解了如何使用线性神经网络解决异或问题。首先,定义了深度学习的含义,然后逐步阐述了解决异或问题的步骤,包括引入必要的库、定义输入和输出、设置隐藏层以及选择激活函数。通过Python代码展示了整个实现过程,最后得出结论,强调了线性神经网络与感知器的区别。
摘要由CSDN通过智能技术生成


前言

本文主要记录自己学习神经网络的过程,写成博客就当是在温习知识的同时也可以在日后复习。也希望个位志同道合的朋友每天进步,愿csdn照亮您的事业和前程。


一、深度学习是什么?

  简单来说深度学习就是今年来随着人工智能兴起的,当今在机器人、人工智能、人脸检测、图像识别等领域广泛应用的机器学习的算法。

二、使用步骤

1.引入库:本案例主要用到两个库numpy和matplotlib

import numpy as np
import matplotlib.pyplot as plt

2.明确思路

首先我们先来分析一下思路,异或就是两个输入相同的时候出0,不同时出1。我们先做如下定义:输入x1,x2都为0或者1时为负样本用-1表示;x1,x2不相同时为正样本用1表示。

因为我们要区分两类样本所以靠单单的一层线性网络(单层感知器)是无法实现的,所以我们要加一个隐藏层。这里采用增加非线性输入的方式来产生非线性成分

确定输入x0,x1,x2,x1^2,x2*x1,x2^2,其中x0是偏置设定为1,权重的范围为-1到1,激活函数选sign函数即y=x。

  1. x0x1x2x1^2x1*x2x2^2
    100000
    101001
    110100
    111111
  2. 输入层乘以权重后的展开(这边只写了一行,其他的类似)

    x0w0+x1w1+x2w2+x1^2w3+x1x2w4+x2^2w5=0

     这里我们把x1,x2看做x,y这样上式就是y关于x的一元二次函数,其中的w0到w5都为常量,x0得值为设定的1。用求根公式求出两个根

  3. 用plt以xdata(-1,2)为横坐标,求出的根为纵坐标生成两条曲线

代码呈现:

import numpy as np
import matplotlib.pyplot as plt

# 区分异或   激活函数y=x
x = np.array([[1,0,0,0,0,0],
              [1,0,1,0,0,1],
              [1,1,0,1,0,0],
              [1,1,1,1,1,1]])
l = np.array([-1,1,1,-1])
b = 0.52      # 学习率
n = 0
w = 0
def update():
    global w
    global l
    global y
    global b
    global n
    w = -1+np.random.random(6)*2  # 产生-1到1的数
    r = np.dot(x,w.T)    # np.dot 矩阵相乘

    wc = b*((l-r.T).dot(x))/x.shape[0]   # 误差:学习率乘以原矩阵和标签矩阵的积 要除以x矩阵的行数使数据不会过大  (l-r.T).dot(x)也为矩阵的乘法运算 x.dot(x)
    n = n + 1
    w = w + wc  # 更新权值


for _ in range(10000):
    update()


print("权矩阵为",w)

x1 = [0,1]                           #np.random.randint(low=0,high=3,size=2)
#print(x1)
y1 = [1,0]
x2 = [0,1]
y2 = [0,1]
def caculater(x,root):
    a = w[5]
    b = w[2]+x*w[4]
    c = w[1]*x+w[0]+x*x*w[3]
    if (root == 1):
        return (-b + np.sqrt(abs(b * b - 4 * a * c))) / (2 * a)
    elif(root == 2):
        return (-b - np.sqrt(abs(b * b - 4 * a * c))) / (2 * a)


xdata = np.linspace(-1,2)   # 均匀生成步长
plt.figure()
plt.plot(xdata,caculater(xdata,1),'r')
plt.plot(xdata,caculater(xdata,2),'r')
plt.plot(x1,y1,'bo')
plt.plot(x2,y2,'yo')
plt.rcParams['font.sans-serif']=['SimHei']
plt.title('线性神经网络')
plt.show()

总结

其中以上就是线性神经网络解决简单的异或问题,线性神经网络和感知器的区别在于,感知器的激活函数只能输出-1和1,线性神经网络的激活函数可以取任意值。上面的例子中涉及到的误差也就是后面的代价函数,这边只是皮毛。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值