人工智能--深度学习两层全连接神经网络搭建

2023-11-18

系列文章目录

人工智能—深度学习从感知机到神经网络
人工智能—深度学习神经网络神经元的实现



前言

      在前面的两个章节中,我们深入的认识了什么神经网络,也完成了对神经网络单位神经元的实现,接下来我们的目标就是搭建一个多层的神经网络系统。


一、多层神经网络的结构

      进行搭建我们今天的多层网络之前,我们可以先参考一下我们之前从感知机抽象出来的神经网络模型,可以看到为了充分考虑每一个参数的重要性,一个结点会全部链接到下一层的每一个结点,这种结构就叫做全连接结构,也是最入门的网络结构,之后大家会接触到更多更神奇的网络,但其实都是从全连接中演变而来。
在这里插入图片描述
在上面这个实例的网络中,第一层(竖着最左边)为输入层,第二层为隐藏层,第三层为输出层,在全连接中网络的层数我们一般取隐藏层的数量,所以上面是个单层的神经网络。

二、两层全连接神经网络

1.搭建模型

      我们已经知道了神经网络中层数的概念,和层的分类,所以我们今天的任务就是搭建一个两层的全连接网络。根据概念我们很容易能得出:

在这里插入图片描述

2.神经元传递理论

      神经元到神经元之间的传递我们之前已经通过两个章节的介绍了解清楚了,但大型的一个网络肯定不能是基于一个元一个元来实现的,我们必须把我们的视角上升到层与层之间的传递。

那么输入层数字化后:
在这里插入图片描述
每一个输入结点都要全连接4个隐藏层1的结点,而每一个链接都有自己的权重,所以我们可以得出权重1(W1)的数字化结构:
在这里插入图片描述
每一个隐藏层都有个共享的偏置(b1),他是一个固定的值,所以我们也能将其数字化:

在这里插入图片描述

同理我们可以数字化W2,b2

在这里插入图片描述
在这里插入图片描述

以及最后的W3,b3
在这里插入图片描述
在这里插入图片描述
      当输入层的数据进入隐藏层1时,需要输入层每一个结点与每一个隐藏层对应结点路线上的权重一一相乘,然后隐藏层1将进入的每个结点相加。
所以隐藏层的结点值为:

结点1:W11*X1+W21*X2+b1
结点2:W12*X1+W22*X2+b1
结点3:W13*X1+W23*X2+b1
结点4:W14*X1+W24*X2+b1

转换为矩阵后为:

[ x 1 x 2 ] \begin{bmatrix} x 1& x2 \end{bmatrix} [x1x2] * [ W 11 W 12 W 13 W 14 W 21 W 22 W 23 W 24 ] \begin{bmatrix}W_{11}&W_{12}&W_{13}&W_{14}\\W_{21}&W_{22}&W_{23}&W_{24}\end{bmatrix} [W11W21W12W22W13W23W14W24] + [ b 1 b 2 b 3 b 4 ] \begin{bmatrix}b1&b2&b3&b4\end{bmatrix} [b1b2b3b4]

读者可以自行验证一下结果是否相同。

激活函数这边我们就先不在公式中表示了。但读者不能忘了每一层都有激活函数

根据矩阵相乘的性质我们可以得出第一层后的结果应该为
[ X 2 1 X 2 2 X 2 3 X 2 4 ] \begin{bmatrix}X_{2}1&X_{2}2&X_{2}3&X_{2}4\end{bmatrix} [X21X22X23X24]
然后同理可得隐藏层2的结果为
[ X 2 1 X 2 2 X 2 3 X 2 4 ] \begin{bmatrix}X_{2}1&X_{2}2&X_{2}3&X_{2}4\end{bmatrix} [X21X22X23X24]* [ W 11 W 12 W 13 W 21 W 22 W 23 W 31 W 32 W 33 W 41 W 42 W 43 ] \begin{bmatrix}W_{11}&W_{12}&W_{13}\\W_{21}&W_{22}&W_{23}\\W_{31}&W_{32}&W_{33}\\W_{41}&W_{42}&W_{43}\end{bmatrix} W11W21W31W41W12W22W32W42W13W23W33W43+ [ b 2 1 b 2 2 b 2 3 ] \begin{bmatrix}b_{2}1&b_{2}2&b_{2}3\end{bmatrix} [b21b22b23]
化简得:
[ X 3 1 X 3 2 X 3 3 ] \begin{bmatrix}X_{3}1&X_{3}2&X_{3}3\end{bmatrix} [X31X32X33]
最后要求的就是我们输出层的数据:
[ X 3 1 X 3 2 X 3 3 ] \begin{bmatrix}X_{3}1&X_{3}2&X_{3}3\end{bmatrix} [X31X32X33] ∗ {*} [ W 11 W 12 W 21 W 22 W 31 W 32 ] \begin{bmatrix}W_{11}&W_{12}\\W_{21}&W_{22}\\W_{31}&W_{32}\end{bmatrix} W11W21W31W12W22W32 + {+} + [ b 3 1 b 3 2 ] \begin{bmatrix}b_{3}1&b_{3}2\end{bmatrix} [b31b32]

然后就是最后的输出:
[ Y 1 Y 2 ] \begin{bmatrix}Y1&Y2\end{bmatrix} [Y1Y2]
      参照我们一开始的模型建模图,可以验证每一层的输入输出形状都是对的,而具体的值大家也可以自行验证,但是需要一点点线性代数的知识,简单百度一下就可计算。


3.激活函数的确定

      因为我们最后的输出是一个简单的二分类的模型,所以我们可以选择更适合分类的激活函数——sigmoid函数来进行预测。而sigmoid的定义我们已经在上一章节中讲了。
1 1 + e − x \frac{1}{1+e^{-x}} 1+ex1
而中间隐藏层的激活函数我们打算选用ReLU,ReLU的定义为:
m a x ( 0 , x ) max(0,x) max(0,x)

三、神经网络实现

1.激活函数实现

def sigmoid(x):
    return 1.0/(1+np.exp(-x))
def ReLU(x):
    return np.maximum(0,x)

2.初始化网络

def init_network():
    network={}
    network['W1'] = np.array([[0.1,0.2,0.3,0.4],[0.4,0.5,0.6,0.5]])
    network['b1'] = np.array([0.1,0.2,0.2,0.1])
    network['W2'] = np.array([[-0.6,0.5,0.4],[0.6,-0.5,0.6],[0.6,-0.5,0.5],[0.5,0.5,-0.5]])
    network['b2'] = np.array([0.4,0.4,0.4])
    network['W3'] = np.array([[-0.6, 0.5], [0.6, -0.6], [ -0.5, 0.5]])
    network['b3'] = np.array([0.5, 0.5])
    return network

3.网络前向传播实现

def forward_net(network,x):
    W1 = network['W1']
    b1 = network['b1']
    W2 = network['W2']
    b2 = network['b2']
    W3 = network['W3']
    b3 = network['b3']
    x = np.dot(x,W1)+b1
    x = ReLU(x)
    x = np.dot(x,W2)+b2
    x = ReLU(x)
    x = np.dot(x, W3) + b3
    x = sigmoid(x)
    return x

4.网络运行

network = init_network()
x = np.array([2,3])
print(forward_net(network,x))

5.运行结果

[0.05775801 0.96893152]

Process finished with exit code 0

总结

      今天带领大家一步步手写实现了我们的复杂神经网络模型,肯定发现原来眼中神秘的网络其实一步步的分析下来后也是很清晰的,那些看似毫无规律的参数和维度也是有理有据的,但这样的一个网络还是“一次性的”,他并不能实际用来预测什么东西,真正的预测网络还需要一个学习的功能,只有会学习了,一个网络才真正具有灵魂。那在下一章节中我就会带领大家来赋予这样一个网络以生命力。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

人工智能--深度学习两层全连接神经网络搭建 的相关文章

随机推荐

  • HEVC原理-图像的二维变换与离散余弦变换(DCT)

    最近在做RDOQ算法优化和硬件系统结构设计 建立其时序模型 估算算法的硬件复杂度 在做这部分工作的同时 博主学习了图像的二维变换与离散余弦变换 DCT 总结如下 1 图像的二维离散变换 与一维的有限长离散非周期信号存在傅里叶变换 DFT 一
  • properties文件快速转为yml文件

    只是做了简单的测试 没有考虑过文件里有注释的情况 思想就是先把数据读到map中 然后再保存到新的文件中 public class Test public static void main String args throws Excepti
  • C++ 0x 之移动语义和传导模板实现原理

    文 李博 光宇广贞 C 0x 之左值与右值 文中提到 std forward 和 std move 本文开头对之补充一句 在操作函数返回值或函数参数时 匿名左值仍然为左值 左值可以具名 匿名右值仍然为右值 右值一旦具名成功 立即转变为左值
  • Fping命令解析

    Fping程序类似于ping ping是通过ICMP 网络控制信息协议InternetControl Message Protocol 协议回复请求以检测主机是否存在 Fping与ping不同的地方在于 fping可以在命令行中指定要pin
  • QT_内存

    深度解析QMap与QHash 转载于 http www cnblogs com 5iedu p 5835715 html
  • Redis——持久化数据

    Redis被称为是内存数据库 那是因为它会将其所有数据存储在内存里 因此Redis具有强劲的速度性能 但是 也正因为数据存储在内存中 当Redis重启后 所有存储在内存的数据就会丢失 为了使得数据持久化 Redis提供了两种方式 RDB方式
  • VGG预训练模型网络结构详解——以VGG16为例

    VGG卷积神经网络是牛津大学在2014年提出来的模型 当这个模型被提出时 由于它的简洁性和实用性 马上成为了当时最流行的卷积神经网络模型 它在图像分类和目标检测任务中都表现出非常好的结果 在2014年的ILSVRC比赛中 VGG 在Top
  • Win10环境+ CUDA9.0 +CUDNN7.0+TensorFlow1.7/1.6/1.5配置

    前言 很多小伙伴在选择CUDA版本和cudnn版本上有疑问 这里简短的说一下 希望能帮到各位小伙伴 我在网上看到有人说 要根据自己的显卡来选择CUDA 其实是错误的 你可以下载自己所需要的CUDA版本 这只是个驱动而已 CUDA的版本和cu
  • kubernetes系列二之Deployment的管理和使用

    目录 1 Kubernetes管理对象 Pod ReplicationController 简称RC ReplicaSet 简称RS Deployment 逻辑关系 从小到大的管理逻辑 2 创建Deployment 运行一个Deployme
  • Lack of free swap space on 192.168.3.1

    zabbix健康报错 Lack of free swap space on 192 168 3 1 解决办法 先查看磁盘swap磁盘容量 是因为Zabbix监控没有考虑虚拟主机的交换空间情况 解决办法修改配置 选择 Lack of free
  • easypoi校验数据时获取excel行号和错误信息

    目录 什么是easypoi easypoi校验excel实体类怎么获取错误信息和excel的行号 需要用到的excel实体类 调用的客户端代码 什么是easypoi easypoi功能如同名字easy 主打的功能就是容易 让一个没见接触过p
  • 华为校招机试题- 数组的中心位置-2023年

    题目描述 给你一个整数数组nums 请计算数组的中心位置 数组中心位置是数组的一个下标 其左侧所有元素相乘的积等于右侧所有元素相乘的积 数组第一个元素的左侧积为1 最后一个元素的右侧积为1 如果数组有多个中心位置 应该返回最靠近左边的那一个
  • 修改lvgl Linux demo使用tslib获取触摸坐标

    1 为什么要修改 o 交叉编译官方lvgl linux demo发现触摸坐标不准确 官方demo获取坐标的做法是 evdev fd open EVDEV NAME O RDWR O NOCTTY O NDELAY if evdev fd 1
  • 再谈TCP三次握手/四次挥手

    TCP三次握手 四次挥手 在TCP IP协议中 TCP协议提供可靠的连接服务 采用三次握手建立一个连接 如图1所示 1 第一次握手 建立连接时 客户端A发送SYN包 SYN j 到服务器B 并进入SYN SEND状态 等待服务器B确认 2
  • 比PS还好用!Python 20行代码批量抠图

    抠图前 vs Python自动抠图后 在日常的工作和生活中 我们经常会遇到需要抠图的场景 即便是只有一张图片需要抠 也会抠得我们不耐烦 倘若遇到许多张图片需要抠 这时候你的表情应该会很有趣 Python能够成为这样的一种工具 在只有一张图片
  • cypress——前端自动化测试框架

    前端自动化测试概述 MVC Model View Controller 模式开始流行 MVC是模型 Model 视图 View 和控制器 Controller 的缩写 它使业务逻辑 数据 界面显示分离 这时Web开发属于View层 Ajax
  • Unity InputSystem 实现同一按键单击、双击、长按执行不同逻辑

    最近学习了一下Unity InputSystem 该系统可用于实现 管理复杂的操作逻辑 上限很高 但由于它有一定的学习成本 导致一些和我一样的小白一入门时不得要领 之前卡住我的一个需求就是通过InputSystem 实现同一按键单击 双击
  • java 0-9 A-Z进位函数

    java 可以包含数字0 9 和字母A Z的加法编码规则 例如城市编码 2位 可以是0 9 也可以是A Z 那么实际编码顺序则是0 1 2 3 4 5 6 7 8 9 A B C D E F G A9的下一个编码是AA AZ的下一个编码是B
  • html背景毛玻璃效果代码,css3毛玻璃效果(背景虚化)

    wrap h3 font size 18px color ffffff wrap p font size 14px color ffffff font variant ligatures common ligatures discretio
  • 人工智能--深度学习两层全连接神经网络搭建

    系列文章目录 人工智能 深度学习从感知机到神经网络 人工智能 深度学习神经网络神经元的实现 文章目录 系列文章目录 前言 一 多层神经网络的结构 二 两层全连接神经网络 1 搭建模型 2 神经元传递理论 3 激活函数的确定 三 神经网络实现