机器学习之深度神经网络

news2024/11/16 2:46:14

目录

卷积神经网络与全连接神经网络

前向后向传播推导

通用手写体识别模型

人脸识别模型

电影评论情感分析模型


卷积神经网络与全连接神经网络

卷积神经网络(Convolutional Neural Network,CNN)和全连接神经网络(Fully Connected Neural Network,FCN)都是深度学习领域中常见的神经网络模型。下面是二者的比较。

1)相同点

①都是前馈神经网络模型,由多个神经元构成。

②都可以通过反向传播算法进行训练,优化网络参数以达到最小化损失函数的目的。

③都可以使用多层堆叠的方式来构建深度网络,提高模型的表达能力。

④都可以处理各种类型的数据,如图像、语音、文本、时间序列等。

2)不同点

①结构不同:

CNN 是由卷积层、池化层和全连接层组成的,其中卷积层和池化层是卷积运算和子采样运算,可以提取出图像中的局部特征。CNN 的结构参数小,具有较强的抗噪声能力。

FCN是由多个全连接层组成的,每个神经元都与上一层的所有神经元相连。这种结构使得全连接网络可以学习到非常复杂的函数映射,但是参数量非常大,容易过拟合。

②权重共享不同:

在FCN中,每个神经元都有独立的权值和偏置。而CNN的卷积层和池化层具有权值共享的特点,这使得模型的参数量大大降低,同时也提高了模型的泛化能力。

③可解释性不同:

FCN是一种黑盒子模型,输入和输出之间的映射关系不可解释,无法获得特征的空间分布情况,难以进行特征可视化。而在CNN中,由于卷积核的权值共享和局部连接性,它们在提取特征时具有一定的可解释性,可以更好地理解特征提取过程。

前向后向传播推导

深度神经网络中的误差逆传播算法(backpropagation,BP算法)是一种用于训练神经网络的反向传播算法。它利用梯度下降法来调整网络参数,使得网络的输出尽可能接近目标输出。

首先,我们需要定义一个损失函数(loss function)。在训练过程中,我们需要将该损失函数最小化,以使网络输出和目标输出的差异最小化。一般情况下,我们会使用均方误差(MSE)或交叉熵(Cross-Entropy)作为损失函数。

接着,利用前向传播算法计算网络的输出值。前向传播算法是指输入数据从输入层到输出层的正向传播过程,整个过程中的每一个神经元都会进行一次乘加运算。

然后,我们需要根据输出误差对每个参数进行更新。这里使用反向传播算法来计算参数的梯度,从而实现参数更新。反向传播算法的核心思想是将误差从输出层一直传递到输入层,并根据每个参数的贡献程度来分配误差值。具体来说,误差的传递由两部分组成:前向传播和反向传播。

在前向传播时,我们通过正向计算来得到输出值;在反向传播时,我们先计算输出误差,再将误差反向传递,并根据每个参数的贡献程度来分配误差值。最后,我们可以使用梯度下降法来调整网络参数,使得网络的输出尽可能接近目标输出。

1)前向传播

 2)后向传播

通用手写体识别模型

使用的数据集为MNIST手写数字识别数据集,包含了0到9这10个数字的灰度图片,一共有 60,000 张训练图片和 10,000 张测试图片,每张图片的大小为 28 x 28 像素。

我们用一个3×3的卷积层来提取图像的特征,激活函数为ReLU函数,接着用一个2×2的最大池化层降低采样,减少参数数量,最后添加一个全连接层,激活函数为softmax函数,给予10个输出神经元,表示0到9的数字分类。

使用了1个卷积核,训练了5轮,训练过程如图7所示。

图7手写体MNIST训练过程

训练出的手写体识别模型在测试集上的识别率和损失随训练的轮次的变化如图8所示。

图8 手写体MNIST识别率

具体数据如表4所示。

表4 手写体MNIST

由结果可以看出,训练出来的手写体识别模型,其拟合效果和泛化效果都比较好。

具体代码实现请看: Keras-深度学习-神经网络-手写数字识别模型_一片叶子在深大的博客-CSDN博客

人脸识别模型

我们首先通过python的PIL库读取图片数据,将所有图片数据存储在numpy数组中,将人脸数据处理成一堆张量,并分成训练集和测试集,然后构建出图片的标签张量。

接着构建深度神经网络,这里我们构建的是卷积神经网络,(Convolutional Neural Network, CNN)模型。这个模型包含了一个卷积层、一个池化层、一个全连接层。其中卷积层用来提取图片中的特征,池化层用来降低数据量,全连接层实现了分类任务。这里我们使用的是3X3的卷积层,激活函数使用的ReLU激活函数,还有2X2的最大池化层,全连接层的激活函数为softmax激活函数。

以下是python构建的卷积神经网络在ORL、FERET和YaleFace三个人脸数据集的训练和表现情况。

  • ORL人脸数据集

ORL人脸数据集有40个人的人脸数据,每个人10张照片,一共400张照片,照片的维数是46×56。我们将每个人的前5张照片作为训练集,共200张,剩下的5张作为测试集,最后的全连接层采用40个神经元作为模型的输出,使用了64个卷积核,训练了20轮,训练过程如图1所示。

图1 ORL训练过程

训练出的人脸识别模型在测试集上的识别率随训练的轮次的变化如图2所示。

图2 ORL识别率

具体数据如表1所示。

表1 ORL

由结果可以看出,ORL数据集训练出来的模型,其拟合效果和泛化效果都比较好。

  • FERET人脸数据集

FERET人脸数据集有200个人的人脸数据,每个人7张照片,一共1400张照片,照片的维数是80×80。我们将每个人的前4张照片作为训练集,共800张,剩下的3张作为测试集,最后的全连接层采用200个神经元作为模型的输出,使用了4个卷积核,训练了20轮,训练过程如图3所示。

图3 FERET训练过程

训练出的人脸识别模型在测试集上的识别率随训练的轮次的变化如图4所示。

图4 FERET识别率

具体数据如表2所示。

表2 FERET

由结果可以知道,FERET数据集训练出来的模型,其拟合效果很好,但泛化效果并不理想,分析原因可能是因为训练的数据过少,加上FERET的噪声影响比较大,最后一张照片光线很暗,导致了测试集的识别率不高。

  • Yale Face人脸数据集

Yale Face人脸数据集有15个人的人脸数据,每个人11张照片,一共165张照片,照片的维数是80×100。我们将每个人的前6张照片作为训练集,共90张,剩下的5张作为测试集,最后的全连接层采用15个神经元作为模型的输出,使用了16个卷积核,训练了20轮,训练过程如图5所示。

图5 Yale Face训练过程

训练出的人脸识别模型在测试集上的识别率随训练的轮次的变化如图6所示。

图6 Yale Face识别率

具体数据如表3所示。

表3 Yale Face

由结果可以看出,Yale Face数据集训练出来的模型,其拟合效果和泛化效果都比较好。

具体代码实现请看: Keras-深度学习-神经网络-人脸识别模型_一片叶子在深大的博客-CSDN博客

电影评论情感分析模型

使用到的数据集为IMDB电影评论情感分类数据集,该数据集包含 50,000 条电影评论,其中 25,000 条用于训练,25,000 条用于测试。每条评论被标记为正面或负面情感,因此该数据集是一个二分类问题。

我们构建一个包含嵌入层、全局平均池化层和输出层的神经网络,输入数据是一组英文电影评论,输出结果是二分类标签,即正面评价或负面评价。

其中,嵌入层将单词索引序列编码为连续的实数向量表示;全局平均池化层将这些向量取平均值去除位置信息,并将其映射到固定长度的向量中;输出层则使用 sigmoid 激活函数进行二分类预测。使用 Adam 优化器和二元交叉熵损失函数进行模型训练,并以准确率作为评估指标,共训练10轮,训练过程如图9所示。

图9 IMDB电影评论情感分析训练过程

训练出的电影评论情感分析模型在测试集上的准确率和损失随训练的轮次的变化如图10所示。

图10情感分析 准确率

具体数据如表5所示。

表5 情感分析

由结果可以知道,我们训练出来的电影评论情感分析模型,其数据的拟合效果和测试的泛化效果都比较理想。

具体代码实现请看:Keras-深度学习-神经网络-电影评论情感分析模型_一片叶子在深大的博客-CSDN博客

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

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

相关文章

Django学习笔记-用户名密码登录

笔记内容转载自 AcWing 的 Django 框架课讲义,课程链接:AcWing Django 框架课。 CONTENTS 1. 扩充Django数据库2. 实现获取用户信息3. 渲染登录与注册界面4. 实现登录与登出功能5. 实现注册功能6. 修改获取用户信息 1. 扩充Django数据库 首先我们先在 s…

JavaWeb学习路线(7)——文件上传

一、概念 (一)文件上传概念: 指将本地的图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程。 (二)前端文件上传三元素 method“post”(form)enctype“multipart/for…

四、Bean 的作用域,Bean 的自动装配以及通过注解实现 Bean 的自动装配

文章目录 一、Bean 的作用域二、Bean 的自动装配三、通过注解实现 Bean 的自动装配 一、Bean 的作用域 Spring 官网 Bean 的作用域讲解 单例(Singleton)作用域:在这种作用域下,容器只会创建一个Bean实例对象,无论该Bean被注入到多少个其它B…

Unity使用MySQL

效果: 问题记录: unity mysql “The given key ‘utf8mb4‘ was not present in the dictionary” – 我这里数据库字符集没有utf8,改选utf8mb4 – 这个改了,那么MySQL配置文件也得改了。如下: – 然后还报错&…

字符、字符集、编码

一、基本概念 在计算机中,所有的内容都是以二进制数据存储的,而我们在屏幕上看到的字和符号以及看不到的字符都是二进制数据转换后的结果。将字符按照某种规则转成对应的二进制数据,这个过程称为编码;而相对应的,将二…

Azure获取linux服务器磁盘和控制台disk的对应关系

从Azure控制台上删除/卸载服务器上不用的磁盘时,需要确定服务器上磁盘和控制台上显示的磁盘的对应关系。以免当有多块磁盘时,卸载了错误的磁盘,引起生产事故。 通过LUN确定磁盘对应关系 什么是LUN? 逻辑单元号 (LUN) 是用于标识…

Vue之事件处理(v-on)

文章目录 前言一、v-on基本使用二、使用举例1.传参和不传参使用2.$event占位代表事件对象3.函数用箭头函数时this作用域4.正常未用箭头函数的this指向(与未用箭头函数作比较) 总结 前言 v-on:事件绑定 一、v-on基本使用 格式:&l…

Linux安装ElasticSearch和Kibana

es官网下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch 可以去官网下载包然后放到服务器 也可以使用wget进行下载安装 如果使用wget方式下载的话需要先安装 安装wget yum install -y wgetwget下载es:wget https://artifacts…

B+树的设计步骤

1.节点的结构(如下图) (1)键值对--key是标识;value是存储的具体数据 (2)节点的子节点--存储的是具体的子节点 (3)节点的后节点--标记后一个节点 (4&#xff0…

JSP实现自定义标签【上】

目录 一、基础概念 1、标签语言的形式或结构 2、分类 二、自定义标签的开发及步骤 三、标签生命周期 1、返回值 四、案例 1、if 2、out 一、基础概念 JSP自定义标签是一种扩展JSP标记语言的方法。通过自定义标签,我们可以将自定义功能封装在一个独立的标签…

# rust abc(6): 字符串的简单使用

文章目录 1. 目的2. 数据类型2.1 str 类型2.2 标准库 String 类型 3. 常用 API3.1 len() 方法3.2 is_empty() 方法3.3 starts_with() 方法3.4 find() 方法 4. References 1. 目的 学习 Rust 语言中的字符串, 包括数据类型, 常用 API。 2. 数据类型 Ru…

新手入门:从零搭建vue3+webpack实战项目模板

搭建一个 vue3 webpack5 element-plus 基本模板 (vue3 webpack5 从零配置项目)。 本项目结构可以作为实战项目的基本结构搭建学习,作为刚学习完vue还没有实战项目经验的小伙伴练习比较合适。 项目地址: GitHub:ht…

如何将手写笔记转换成电子版格式?

记笔记是一种非常有效的学习方法。它不仅可以帮助我们加深对所学内容的理解,还能让我们收集更多有用的信息,以方便后续的查看和复习。不过,用传统的纸质笔记本记录笔记存在一定的弊端,比如说不易保存、不易携带等等。所以&#xf…

Mac下的java.io.FileNotFoundException: ~/Desktop/a.sql (No such file or directory)

【问题】: 今天在运行一个文件读取的Demo时,报如下错误: java.io.FileNotFoundException: ~/Desktop/a.sql (No such file or directory)如下图所示 : 可是这个文件命名可以通过终端窗口访问到啊? 【解决方案】&#xff…

STM32外设系列—HC-SR04(超声波)

文章目录 一、超声波测距基本原理二、超声波传感器简介三、HC-SR04测距实现思路四、超声波测距程序实现4.1 HC-SR04初始化程序4.3 TIM开关程序4.4 获取定时时间4.5 计算测量距离4.6 宏定义 五、应用实例六、拓展应用 一、超声波测距基本原理 超声波测距的原理非常简单&#xf…

高压放大器在压电陶瓷驱动器中的应用

高压放大器是一种将低电压信号放大成高电压信号的电子设备。它广泛运用于各种领域,如医疗、工业、军事以及科学研究。压电陶瓷驱动器是一种利用压电效应来驱动机械运动的装置。这两种设备经常被用于控制和操作许多不同类型的系统。 压电陶瓷是一种能够将电能转化为机…

监控摄像头的像素200万,400万,800万都是什么意思,200万像素、400万像素、800万像素是如何换算出来的?

一、像素 像素(Pixel)是用来表示图像分辨率的单位,数字越大,表示图像中的细节可以更精细地展现。当我们谈论监控摄像头的像素时,通常指的是摄像头图像传感器上的像素数量。像素的数量可以通过传感器上的横向像素数乘以…

win如何使用OpenSSL生成自签名证书,使 http 升级为 https

win如何使用OpenSSL生成自签名证书,使 http 升级为 https 前言 HTTPS其实就是HTTP over SSL,也就是让HTTP连接建立在SSL安全连接之上。 创建自签名证书需要安装openssl。参考本文安装OpenSSL部分。 使用OpenSSL生成自签名证书的步骤:参考…

python spider 爬虫 之 Selenium 系列 (-) Selenium

京东的 seckill 秒杀 专区 用 urllib 是获取不到的 回顾一下urllib 爬虫 # urllib 爬虫 from urllib import request headers {} url # 请求定制 req request(urlurl, headers headers) # 模拟请求 response request(req) content response.read().decode(utf-…

windows下安装Visual Studio + CMake+OpenCV + OpenCV contrib

目录 1 安装visual studio 2 安装CMake 3 OpenCV源码安装 3.1 OpenCV源码下载 3.2 OpenCV contrib源码下载 3.3 安装OpenCV 3.4 安装OpenCV-crontrib 3.5 VS生成代码 4 环境配置 最近在研究windows系统上部署安装目标检测算法,需要用到OpenCV软件&#xff…