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

news2024/12/1 0:36:13

神经网络

  • 一、神经网络概述
    • 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
    • 5.3 题3


一、神经网络概述

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 plt

mnist = 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 / 255

print("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

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

5.3 题3

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SQL】Mysql 时区设置解决--20230928

https://blog.csdn.net/qq_44392492/article/details/108717616 输入命令show variables like “%time_zone%”;(注意分号结尾)设置时区,输入 set global time_zone “8:00”; 回车,然后退出重启(一定记得重启,不然查…

Mysql 本地计算机无法启动 mysql 服务 错误 1067:进程意外终止

有时候一段时间本地mysql不用,在连接本地数据库的时候,会报mysql无法连接出现错误提示10061错误, 这时候一般是本地mysql服务没有启动 去左下角搜“服务”,进入后选择Mysql,点击启动(我的截图是已经启动好…

C#,数值计算——Ranfib的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Implements Knuths subtractive generator using only floating operations. See /// text for cautions. /// </summary> public class Ranfib { p…

通过茶叶酒水小程序商城的作用是什么?

茶叶酒水往往会在一起经营&#xff0c;同时又具备较强的送礼属性&#xff0c;需求度较高但经营商家同样不少&#xff0c;同行竞争激烈&#xff0c;加之同城生意有限、外地客户难以拓展、销售营销不足、品牌宣传效果差等痛点&#xff0c;传统酒水茶叶门店需要线上带来增长。 那…

大数据Flink(九十二):DML:集合操作

文章目录 DML:集合操作 DML:集合操作 集合操作支持 Batch\Streaming 任务。 UNION:将集合合并并且去重。

uni-app:js修改元素样式(宽度、外边距)

效果 代码 1、在<view>元素上添加一个ref属性&#xff0c;用于在JavaScript代码中获取对该元素的引用&#xff1a;<view ref"myView" id"mybox"></view> 2、获取元素引用 &#xff1a;const viewElement this.$refs.myView.$el; 3、修改…

【Flink】

事件驱动型应用 核心目标&#xff1a;数据流上的有状态计算 Apache Flink是一个框架和分布式处理引擎&#xff0c;用于对无界或有界数据流进行有状态计算。 运行逻辑 状态 把流处理需要的额外数据保存成一个“状态”,然后针对这条数据进行处理,并且更新状态。这就是所谓的“…

mrctf2020_shellcode_revenge

mrctf2020_shellcode_revenge Arch: amd64-64-little RELRO: Full RELRO Stack: No canary found NX: NX disabled PIE: PIE enabled RWX: Has RWX segments64位&#xff0c;开了PIE和RELRO&#xff0c;看到RWX出来&#xff0c;就感觉是shellcode了…

如何使用PyInstaller打包Python应用(包含参数详解,spec文件详解,反编译和防止反编译)

文章目录 介绍PyInstaller安装PyInstaller参数及使用方法PyInstaller打包技巧和注意事项反编译和防止反编译介绍PyInstaller PyInstaller是一个强大的Python打包工具,它可以将Python程序打包成独立的可执行文件,方便在不同的操作系统上分发和运行。使用PyInstaller,你可以将…

react.js在visual code 下的hello World

想学习reacr.js &#xff0c;就开始做一个hello world。 我的环境是visual code &#xff0c;所以我找这个环境下的例子。参照&#xff1a; https://code.visualstudio.com/docs/nodejs/reactjs-tutorial 要学习react.js &#xff0c;还得先安装node.js&#xff0c;我在visual …

Mysql高级语句(进阶查询语句、数据库函数、连接查询)

Mysql高级语句&#xff08;进阶查询语句、MySQL数据库函数、连接查询 一、mysql查询语句1.1、 select ----显示表格中一个或数个字段的所有数据记录1.2、 distinct ----不显示重复的数据记录1.3、where ----有条件查询1.4、 and or ----且 或1.5 、in----显示已知的值的数据记录…

9_分类算法—决策树

文章目录 1 信息熵1.1 比特化&#xff08;Bits&#xff09;1.2 一般化的比特化&#xff08;Bits&#xff09;1.3 信息熵&#xff08;Entropy&#xff09;1.3.1 熵越大混乱程度越大 1.4 条件熵H&#xff08;YIX&#xff09; 2 决策树2.1 什么是决策树2.2 决策树构建过程&#xf…

MySQL 索引的作用、索引结构及执行流程介绍(索引篇 一)

索引介绍 MySQL索引&#xff08;index&#xff09;是一种用于加快数据库中数据搜索和查询的数据结构。它类似于书籍的目录&#xff0c;可以帮助数据库快速定位和访问特定数据&#xff0c;而无需扫描整个数据表。 索引的作用和缺点 1. 加快数据搜索&#xff1a;通过使用索引&…

《C++ Primer》练习7.31:定义互相嵌套的类

类可以先声明再定义&#xff0c;可以用下面这个题目理解一下 class Y; class X {Y *y; };class Y {X x; };未出现的类类型要在前面声明。 参考 《C Primer》

0x84加密数据传输服务

为了在安全模式下实现一些诊断服务&#xff0c;在服务端和客户端应用程序之间添加了Security sub-layer。在客户端与服务端之间进行诊断服务数据传输有两种方法&#xff1a; 1、非安全模式下数据传输   应用程序使用诊断服务(diagnostic Services)和应用层服务原语(Applicati…

网络-跨域解决

文章目录 前言一、跨域是什么&#xff1f;二、跨域的解决1.JSONP2.前端代理dev环境3.后端设置请求头CORS4.运维nginx代理 总结 前言 本文主要介绍跨域问题介绍并提供了四种解决办法。 一、跨域是什么&#xff1f; 准确的来说是浏览器存在跨域问题&#xff0c;浏览器为了安全考…

pygame实现跳跃发射子弹打怪效果

import pygame import sys,time,random from pygame.locals import * pygame.init() # 设置按下鼠标的时候一直触发 pygame.key.set_repeat(10, 10) # 加载背景图片 bg pygame.image.load(./img/bg.png) # 加载左方向行走和站立图片 heroLStand pygame.image.load(img/heroLs…

IoT 物联网 JavaScript 全栈开发,构建家居环境监控系统实战

智能家居环境监测端到端场景&#xff0c;全栈JavaScript开发&#xff0c;串联Ruff硬件、温湿度和空气质量传感器、阿里云 IoT、Serverless函数计算、百度ECharts可视化、最终以微信小程序形式在微信里实时展示家中实时温度&#xff0c;湿度&#xff0c;PM2.5指数。 01 技术架构…

嵌入式Linux应用开发-第十一章设备树的引入及简明教程

嵌入式Linux应用开发-第十一章设备树的引入及简明教程 第十一章 驱动进化之路&#xff1a;设备树的引入及简明教程11.1 设备树的引入与作用11.2 设备树的语法11.2.1 1Devicetree格式11.2.1.1 1DTS文件的格式11.2.1.2 node的格式11.2.1.3 properties的格式 11.2.2 dts文件包含 d…

postgresql实现单主单从

实现步骤 1.主库创建一个有复制权限的用户 CREATE ROLE 用户名login # 有登录权限的角色即是用户replication #复制权限 encrypted password 密码;2.主库配置开放从库外部访问权限 修改 pg_hba.conf 文件 &#xff08;相当于开放防火墙&#xff09; # 类型 数据库 …