IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 深度学习入门之线性神经网络解决异或问题 -> 正文阅读

[人工智能]深度学习入门之线性神经网络解决异或问题

文章目录


前言

本文主要记录自己学习神经网络的过程,写成博客就当是在温习知识的同时也可以在日后复习。也希望个位志同道合的朋友每天进步,愿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,线性神经网络的激活函数可以取任意值。上面的例子中涉及到的误差也就是后面的代价函数,这边只是皮毛。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-24 15:33:09  更:2021-08-24 15:35:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 18:47:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码