机器学习(19)---神经网络详解

神经网络

  • 一、神经网络概述
    • 1.1 神经元模型
    • 1.2 激活函数
  • 二、感知机
    • 2.1 概述
    • 2.2 实现逻辑运算
    • 2.3 多层感知机
  • 三、神经网络
    • 3.1 工作原理
    • 3.2 前向传播
    • 3.3 Tensorflow实战演示
      • 3.3.1 导入数据集查看
      • 3.3.2 数据预处理
      • 3.3.3 建立模型
      • 3.3.4 评估模型
  • 四、反向传播
  • 五、例题
    • 5.1 题1
    • 5.2 题2


一、神经网络概述

1.1 神经元模型

 1. 这里采用最广泛一种定义:神经网络是由适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。

 2. 定义中的 “简单单元” 是神经网络中最基本的成分,叫神经元模型。目前一直沿用至今的是 “M-P神经元模型”。

在这里插入图片描述

 3. 在这个模型中,神经元接收到来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接(connection)进行传递,神经元接收到的总输入值与神经元的阈值进行比较,然后通过 “激活函数” 处理以产生神经元的输出。

1.2 激活函数

 1. 神经网络中的激活函数是一种非线性函数,它被应用于神经元的输出,以便引入非线性特性。激活函数的作用是对输入信号进行转换,使其能够更好地适应复杂的数据模式。

 2. 理想中的激活函数是阶跃函数,它将输入值映射为输出值“ 0 ”和“ 1 ”,显然 " 1 " 对应于神经元兴奋 " 0 " 对应于神经元抑制。然而阶跃函数具有不连续、不光滑等不太好的性质,因此常用Sigmoid函数作为激活函数。它把可能在较大范围内变化的输入值挤压到 (0,1) 输出值范围内,因此有时也称为 " 挤压函数 " (squashi functio)。

在这里插入图片描述
 3. 不要在隐藏层中使用线性激活函数;通常在隐藏层中使用ReLu激活函数。

在这里插入图片描述

二、感知机

2.1 概述

 1. 感知机 (Perceptron)由两层神经元组成,输入层接收外界输入信号后传递给输出层, 输出层是M-P神经元,亦称"阔值逻辑单元" (threshold logic unit)。

在这里插入图片描述
 2. (手写)感知机的学习方法:

在这里插入图片描述

2.2 实现逻辑运算

 1. 感知机能实现基本逻辑运算:与、或、非。 注意:需要我们选取正确的参数!
 如下图所示:我们拿与来举例子,当x1和x2只有同时取1时,输出结果才会为1;如果有一个或者两个都取0,则输出结果为0,实现了与的逻辑运算。

在这里插入图片描述

 2. 但是单层感知机不能实现异或运算。

2.3 多层感知机

 1. 多层感知机有多层神经元,输出层与输入层之间的一层神经元,被称为隐居或隐含层(hidden laye),隐含层和输出层神经元都是拥有激活函数的功能神经元。

在这里插入图片描述

 2. 多层感知机因为可以有多个隐层,所以可以实现异或运算。

 3. 多层感知机有强大的表示能力,只需一个包含足够多神经元的隐层, 多层感知机就能以任意精度逼近任意复杂度的连续函数。多层感知机可以有多个隐层,每个隐层提取的特征不一样,越深(越靠近输出层)的隐层能够提取更高层的特征。

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

三、神经网络

3.1 工作原理

 1. 原理可归结为:每一层输入一个数字向量并对其应用一堆逻辑回归单元,然后计算另一个数字向量(这一层的输出作为下一层的输入),然后从一层传递给另一层,直到到达最终的输出层。之后的输出结果可以进行预测也可以不进行预测。

 2. 简单神经网络模型的工作原理解析:

在这里插入图片描述

:a、w、b右上角方括号里的数字代表是第几层,右下角数字表示是该层的第几个神经元。

 3. 从简单到复杂,多层神经网络的工作原理和上叙是一样的。我们以一个四层网络为例子:

在这里插入图片描述

:一般说到多层的神经网络时,它包括输出层和所有的隐含层,不包括输入层。

3.2 前向传播

 神经网络在训练和计算时采用了前向传播的算法(从左往右)。

在这里插入图片描述

3.3 Tensorflow实战演示

3.3.1 导入数据集查看

 MNIST数据集,由 60000 张训练图像和 10000 张测试图像以及表示图像中存在的数字的标签组成。每个图像由 28×28 个灰度像素表示,这里直接调用API即可。

import tensorflow as tf
import matplotlib.pyplot as pltmnist = tf.keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()# 查看整体情况
print("train_images shape: ", train_images.shape)
print("train_labels shape: ", train_labels.shape)
print("test_images shape: ", test_images.shape)
print("test_labels shape: ", test_labels.shape)# 展示前9个图像
fig = plt.figure(figsize=(10, 10))nrows = 3
ncols = 3
for i in range(9):fig.add_subplot(nrows, ncols, i + 1) #行数、列数、索引plt.imshow(train_images[i])plt.title("Digit: {}".format(train_labels[i]))plt.axis(False)
plt.show()

在这里插入图片描述

3.3.2 数据预处理

 因为里面有数字,防止模型将数字当作数值处理,我们的目的是识别数字而非有大小之分的数值因此标记独一标签。

train_images = train_images / 255
test_images = test_images / 255print("First Label before conversion:")
print(train_labels[0]) #5# 转换成One-hot标签
train_labels = tf.keras.utils.to_categorical(train_labels)
test_labels = tf.keras.utils.to_categorical(test_labels)print("First Label after conversion:")
print(train_labels[0]) #[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]

3.3.3 建立模型

 1. 展平层:我们的输入图像是 2D 数组。展平层通过逐行解堆叠将 2D 数组(28 x 28 像素)转换为 1D 数组(像素)。该层只是更改数据形状,不会学习任何参数/权重,28*28=784;隐藏层:我们唯一的隐藏层由一个完全连接的节点(或神经元)密集层组成,每个节点(或神经元)都有激活功能,512relu输出层:神经网络的输出层由一个具有 10 个输出神经元的密集层组成,每个神经元输出 10 个概率,每个概率为 0 – 9,表示图像是相应数字的概率。输出层被赋予激活函数,以将输入激活转换为概率,softmax

 2. 损失函数:这告诉我们的模型如何找到实际标签和模型预测的标签之间的误差。该指标衡量我们的模型在训练期间的准确性。我们希望模型最小化此函数值。我们将为我们的模型使用损失函数;优化:这告诉我们的模型如何通过查看数据和损失函数值来更新模型的权重/参数。我们将为我们的模型使用优化器adam;指标(可选):它包含用于监视训练和测试步骤的指标列表。我们将使用准确性或模型正确分类的图像数量。

### 设置图层
model = tf.keras.Sequential([# 展平层tf.keras.layers.Flatten(),# 隐藏层tf.keras.layers.Dense(units=512, activation='relu'),# 输出层tf.keras.layers.Dense(units=10, activation='softmax')
])### 编译模型
model.compile(loss = 'categorical_crossentropy',optimizer = 'adam',metrics = ['accuracy']
)

3.3.4 评估模型

 1. 可视化损失性:

在这里插入图片描述

 2. 可视化准确性:

在这里插入图片描述

四、反向传播

 1. 这里我们采用每层1个单元的多层感知机做介绍。下图W和B中的K代表省略的值。

在这里插入图片描述

 2. 反向传播计算中实际上是对每个参数求梯度下降。那求梯度下降关键是求损失函数对每个参数的偏导。

在这里插入图片描述

 3. 推导过程:

在这里插入图片描述
 4. 总结反向传播:从最后一层开始求每个参数的偏导,并将每层求得的部分偏导值(误差),反向传播给上一层,以方便求上一层参数的偏导。

五、例题

5.1 题1

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

5.2 题2

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/141409.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day1-DeepWalk

论文《DeepWalk: Online Learning of Social Representations》 2014年发表在数据挖掘顶会ACM SIGKDD(KDD)上的论文 目的:学习节点表示 推动:将自然语言处理里面的无监督学习方法迁移至此 思路:将图结构序列化&#x…

ajax method to retrieve images as a blob

go 服务端: 就是先把这个图片读出来 然后返回二进制的数据 byteFile, err : ioutil.ReadFile("." "/processed/" uuidStr"processed.png")if err ! nil {fmt.Println(err)}c.Header("Content-Disposition", "att…

MYSQL不常用但好用写法

ORDER BY FIELD() 自定义排序逻辑 MySql 中的排序 ORDER BY 除了可以用 ASC 和 DESC,还可以通过 「ORDER BY FIELD(str,str1,…)」 自定义字符串/数字来实现排序。这里用 order_diy 表举例,结构以及表数据展示: ORDER BY FIELD(str,str1,…) …

Android 滑动事件消费监控,Debug 环境下通用思路

Android Debug 环境下滑动事件消费监控通用思路 背景 Android 开发中,经常会遇到滑动事件冲突。在一些简单的场景下,我们如果能够知道是那个 View 拦截了事件,那我们能够很容易得解决。解决方法通常就是内部拦截法或者外部拦截法。ViewPage…

SWC 流程

一个arxml 存储SWC (可以存多个,也可以一个arxml存一个SWC)一个arxml 存储 composition (只能存一个)一个arxml 存储 system description (通过import dbc自动生成system) 存储SWC和composition的arxml文件分开&#…

注入之SQLMAP(工具注入)

i sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL和SQL注入漏洞,其广泛的功能和选项包括数据库指纹,枚举,数据库提权,访问目标文件系统,并在获取操作权限时执行任…

Java学习星球,十月集训,五大赛道(文末送书)

目录 什么是知识星球?我的知识星球能为你提供什么?专属专栏《Java基础教程系列》内容概览:《Java高并发编程实战》、《MySQL 基础教程系列》内容概览:《微服务》、《Redis中间件》、《Dubbo高手之路》、《华为OD机试》内容概览&am…

北工大汇编——综合题(1)

题目要求 统计字符数。从键盘输入一行字符,统计字母、空格、数字、其他宇符的个数,并显示。要求:提示输入一行宇符串;键盘输入宇符串,Enter 键结束输入,并换行显示结果。 题目代码 DATAS SEGMENT;此处输…

JSP ssm 零配件管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java ssm 零配件管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用…

一文了解什么SEO

搜索引擎优化 (SEO) 是一门让页面在 Google 等搜索引擎中排名更高的艺术和科学。 一、搜索引擎优化的好处 搜索引擎优化是在线营销的关键部分,因为搜索是用户浏览网络的主要方式之一。 搜索结果以有序列表的形式呈现,网站在该列表中的排名越高&#x…

Android开发MVP架构记录

Android开发MVP架构记录 安卓的MVP(Model-View-Presenter)架构是一种常见的软件设计模式,用于帮助开发者组织和分离应用程序的不同组成部分。MVP架构的目标是将应用程序的业务逻辑(Presenter)、用户界面(V…

Selenium自动化测试框架常见异常分析及解决方法

01 pycharm中导入selenium报错 现象: pycharm中输入from selenium import webdriver, selenium标红 原因1: pycharm使用的虚拟环境中没有安装selenium, 解决方法: 在pycharm中通过设置或terminal面板重新安装selenium 原因2: 当前项目下有selenium.py,和系统包名冲突导致, …

Linux学习第19天:Linux并发与竞争实例: 没有规矩不成方圆

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 先说点题外话,上周参加行业年会,停更了一周。接下来的周五就要开启国庆中秋双节模式,所以有的时候,尤其是工作以后…

JAVA学习-全网最详细

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

表格内日期比较计算

需求&#xff1a;在表格中新增数据&#xff0c;计算开始日期中最早的和结束日期中最晚的&#xff0c;回显到下方。 <el-formref"formRef":model"ruleForm":rules"rules"style"margin-top: 20px;"label-position"top">…

Golang 的 GMP:并发编程的艺术

前言 在 Golang 的并发编程中&#xff0c;GMP 是一个重要的概念&#xff0c;它代表了 Goroutine、M&#xff08;线程&#xff09;和 P&#xff08;调度器&#xff09;。这个强大的三位一体的并发模型使得 Golang 在处理并发任务时非常高效和灵活。通过 GMP 的组合&#xff0c;…

美轮美奂,尽在眼前——Aerial for Mac 高清鸟瞰屏保程序

想要让您的 Mac 屏幕焕发别样风采&#xff1f;那么&#xff0c;Aerial for Mac 高清鸟瞰屏保程序一定不容错过。这款应用程序将为您带来最优质的高清鸟瞰视频壁纸&#xff0c;让您的屏幕焕发无限活力和美感。 Aerial for Mac 高清鸟瞰屏保程序是一款专为 Mac 设计的屏幕保护程…

2023-9-25 货仓选址

题目链接&#xff1a;货仓选址 #include <iostream> #include <algorithm>using namespace std;const int N 100010;int n; int a[N];int main() {cin >> n;for(int i 0; i < n; i ) cin >> a[i];sort(a, a n);int res 0;for(int i 0; i < …

翻译像机翻?4点教会你ChatGPT高质量翻译

如果完全靠自己的英文和中文水平&#xff0c;要达到这样的翻译速度和质量那是不太可能的&#xff0c;主要还是得益于ChatGPT的帮助&#xff0c;首先用GPT-4的API粗翻&#xff0c;再用ChatGPT Plus精翻。很多人都用过ChatGPT翻译&#xff0c;但翻译出来的结果比起Google翻译和De…

C#通过重写Panel改变边框颜色与宽度的方法

在C#中,Panel控件是一个容器控件,用于在窗体或用户控件中创建一个可用于容纳其他控件的面板。Panel提供了一种将相关控件组合在一起并进行布局的方式。以下是Panel控件的详细使用方法: 在窗体上放置 Panel 控件: 在 Visual Studio 的窗体设计器中,从工具箱中拖动并放置一…