R语言深度学习-5-深度前馈神经网络

本教程参考《RDeepLearningEssential》

本篇我们将学习如何建立并训练深度预测模型。我们将关注深度前馈神经网络


5.1 深度前馈神经网络

我们还是使用之前提到的H2O包,详细可以见之前的博客:R语言深度学习-1-深度学习入门(H2O包安装报错解决及接入/H2O包连接数据集)-CSDN博客

library('h2o')
cl <- h2o.init(max_mem_size = "20G",nthreads = 10,ip = "127.0.0.1", port = 54321)

深度前馈神经网络,也被称为前馈神经网络或多层感知机(MLP),是一种典型的多层神经网络,其中数据在神经元之间单向流动,从输入层经过一个或多个隐藏层传递到输出层。这种类型的网络不包含任何循环或反馈连接,意味着信息的流向是从上到下,不会从输出层返回至输入层。

深度前馈神经网络的核心优势在于其能够通过学习输入数据和目标输出之间的复杂映射关系来执行各种任务。这得益于它的层次结构,每一层都从前一层接收信息并产生输出,这些输出作为下一层的输入。随着网络层次的加深,它能够捕捉更抽象的特征,从而提升模型的性能和泛化能力。

如图所示,来自输入X到输出Y的全部映射是一个多层函数。第一个隐藏层是:

H_{1} = f^{(1)}(X,\omega _{1},\alpha _{1})

而在每一层中有多少隐藏神经元及使用什么激活函数,我们在5.2讨论,另一个关键是成本或损失函数,常用的是交叉熵(cross-entropy)和二次的函数均方差(MSE)。

5.2 激活函数

激活函数在神经网络中扮演着至关重要的角色。它们通常被嵌入到神经网络的隐藏层中,用以引入非线性因素,使得神经网络能够学习和模拟复杂的数据模式。没有激活函数,无论神经网络有多少层,最终都只是相当于一个线性变换,无法解决非线性问题。

激活函数的种类多样,每种都有其特定的用途和特性。以下是一些常见的激活函数及其特点:

1. Sigmoid函数:Sigmoid函数可以将任意实数映射到(0,1)区间内,这使得它可以用来做二分类问题的输出层。然而,当输入值较大或较小时,Sigmoid函数的梯度接近于0,容易导致梯度消失

2. Tanh函数:Tanh函数是Sigmoid函数的变种,它将实数映射到(-1,1)区间内,相比于Sigmoid函数,Tanh函数的输出以0为中心,但它同样存在梯度消失的问题。

3. ReLU函数:ReLU(Rectified Linear Unit)函数是目前最常用的激活函数之一。它在输入大于0时直接输出该值,小于等于0时输出0。ReLU函数解决了梯度消失问题,计算简单且加速了神经网络的训练。但ReLU函数也有缺点,比如当输入为负数时,梯度始终为0,可能导致神经元“死亡”。

4. Leaky ReLU函数:Leaky ReLU是对ReLU的改进,它在输入小于等于0时,梯度不为0,而是一个很小的正数。这样可以缓解ReLU的死神经元问题。

5. Softmax函数:Softmax函数常用于多分类问题的输出层,它可以将一组数值转化为概率分布。

6. Swish函数:Swish函数是一个平滑且非单调的激活函数,由谷歌提出,在某些情况下比ReLU表现更好。

7. Mish函数:Mish函数结合了ReLU和Swish的优点,具有更好的性能表现。

5.3 选取超参数

我们在之前的模型选择参数,一般是选取如权重或者截距。不过还有一些参数能够被学到或者能被优化,我们在进行模型选择的时候,也是一种超参数。我们还是使用之前的手写字数据进行实践:

R语言深度学习-2-训练预测模型-CSDN博客

我们使用H2O的深度学习算法来训练一个分类器,并比较不同学习率对模型性能的影响。以下是两个深度学习模型的配置和它们的运行时间分析。

options(width = 70, digits = 2)
#初始化
dig_train <- read.csv("C:\\Users\\Huzhuocheng\\Desktop\\digit-recognizer\\train.csv")
dim(dig_train) #数据维度查看
dig_train$label <- factor(dig_train$label, levels = 0:9)h2odigits <- as.h2o(dig_train,destination_frame = "h2odigits")
i <- 1:32000
h2odigits.train <- h2odigits[i, ]
itest <- 32001:42000
h2odigits.test <- h2odigits[itest, ]
xnames <- colnames(h2odigits.train)[-1]#训练模型
system.time(ex1 <- h2o.deeplearning(x = xnames,y = "label",training_frame= h2odigits.train,validation_frame = h2odigits.test,activation = "RectifierWithDropout",hidden = c(100),epochs = 10,adaptive_rate = FALSE,rate = .001,input_dropout_ratio = 0,hidden_dropout_ratios = c(.2)
))
system.time(ex2 <- h2o.deeplearning(x = xnames,y = "label",training_frame= h2odigits.train,validation_frame = h2odigits.test,activation = "RectifierWithDropout",hidden = c(100),epochs = 10,adaptive_rate = FALSE,rate = .01,input_dropout_ratio = 0,hidden_dropout_ratios = c(.2)
))

 我们选择了不同的学习率,ex1中学习率是0.001,在ex2中,学习率是0.01,我们发现ex1的运行时间长很多,但是就模型效果来说,ex1更好:

 深刻理解超参数,对我们在模型进行训练中有事半功倍的效果,有的时候不是模型不行,而是选择了错误的超参数,这很重要。

5.4 深度神经网络训练及预测

我们使用之前提到的UCI数据进行演示:UCI Machine Learning Repository

#数据导入
train_x <- read.table("C:/Users/Huzhuocheng/Desktop/UCI数据/UCI HAR Dataset/UCI HAR Dataset/train/X_train.txt")
train_Y <- read.table("C:/Users/Huzhuocheng/Desktop/UCI数据/UCI HAR Dataset/UCI HAR Dataset/train/y_train.txt")
test_x <- read.table("C:/Users/Huzhuocheng/Desktop/UCI数据/UCI HAR Dataset/UCI HAR Dataset/test/X_test.txt")
test_Y <- read.table("C:/Users/Huzhuocheng/Desktop/UCI数据/UCI HAR Dataset/UCI HAR Dataset/test/y_test.txt")
barplot(table(train_Y))
train_x <- as.data.frame(train_x)
train_Y <- as.data.frame(train_Y)train_Y <- factor(train_Y)  
test_Y <- factor(test_Y)   use.train <- cbind(train_x, Outcome = train_Y)
use.test <- cbind(test_x, Outcome = test_Y)use.labels <- read.table("C:\\Users\\Huzhuocheng\\Desktop\\UCI数据\\UCI HAR Dataset\\UCI HAR Dataset\\activity_labels.txt")
h2oactivity.train <- as.h2o(use.train,destination_frame = "h2oactivitytrain")
h2oactivity.test <- as.h2o(use.test,destination_frame = "h2oactivitytest")

 接下来,我们使用H2O的deeplearning包进行深度学习,使用的激活函数是线性整流器,并且使用了我们上次讲的丢弃正则化,带有输入变量20%丢弃和隐藏神经元50%丢弃,并且我们建立的是一个50神经元和10次迭代的浅层网络,损失函数是交叉熵。

mt1 <- h2o.deeplearning(x = colnames(train_x),y = "Outcome",training_frame= h2oactivity.train,activation = "RectifierWithDropout",hidden = c(50),epochs = 10,loss = "CrossEntropy",input_dropout_ratio = .2,hidden_dropout_ratios = c(.5),export_weights_and_biases = TRUE
)

显示了层数及每个层中单元的个数,单元的类型,丢弃百分比和其他正则信息。

这个则显示了模型的性能,包括均方误,对数损失等。

混淆矩阵显示了预测与真实值的差距。

5.5 小结

我们本次使用H2O包对深度神经网络进行了学习应用,不过我们在例子中构建的都是浅层的神经网络,大家可以自己调参数实现更好的理解与应用。

 

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

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

相关文章

用 Visual Studio 调试器中查看内存中图像

返回目录&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 前一篇&#xff1a;OpenCV4.9.0在windows系统下的安装 后一篇&#xff1a; ​警告 本教程可以包含过时的信息。 Image Watch 是 Microsoft Visual Studio 的插件&#xff0c;可用于在调…

Webapi(.net6) 批量服务注册

如果不考虑第三方库&#xff0c;如Autofac这种进行服务注入&#xff0c;通过本身的.Core Weabpi实现的&#xff0c;总结了两种实现方法&#xff0c; 1.一种是参考abp框架里面的形式; 1.1 新建个生命周期的文件夹: 三个接口分别为: public interface IScopedDependency { }pu…

tomcat 实现会话绑定

Tomcat 后端服务器实现 Session ID会话保持 基础架构&#xff1a; 7-6 代理服务器nginx配置 7-3 tomcat 服务器 7-5 同理 测试&#xff1a; 此时刷新&#xff0c;会话ID一直在变&#xff0c;这样不好 如何解决呢&#xff1f; 不好的是确定ip之后&#xff0c;会一直在一台机上…

RISC-V 编译环境搭建:riscv-gnu-toolchain 和 riscv-tools

RISC-V 编译环境搭建&#xff1a;riscv-gnu-toolchain 和 riscv-tools 编译环境搭建以及说明 操作系统&#xff1a;什么系统都可以 虚拟机&#xff1a;VMmare Workstation Pro 17.50.x (版本不限) 编译环境&#xff1a;Ubuntu 18.04.5 CPU&#xff1a;i7-8750h(虚拟机分配4核…

JVM学习-JMM

目录 1.什么是JMM 2.JMM怎样保障数据的可见性、有序性、原子性 2.1保证原子性 2.2.保证可见性 2.3保证有序性 3.CAS 3.1乐观锁和悲观锁 3.2 CAS介绍 4.重量级锁的自旋优化 1.什么是JMM JMM即Java内存模型 &#xff0c;定义了一套在多线程读写共享数据&#xff08;如数组、成…

openssl3.2 - note - Writing OpenSSL Provider Skeleton

文章目录 openssl3.2 - note - Writing OpenSSL Provider Skeleton概述笔记测试工程的建立复现的provider工程总结Provider包含的头文件openssl/core.h中的数据结构实现 OSSL_provider_init()看一下openssl自带的提供者provider的openssl命令行测试provider的本质是hook了opens…

插入排序:一种简单而有效的排序算法

插入排序&#xff1a;一种简单而有效的排序算法 一、什么是插入排序&#xff1f;二、插入排序的步骤三、插入排序的C语言实现四、插入排序的性能分析五、插入排序的优化六、总结 在我们日常生活和工作中&#xff0c;排序是一种非常常见的操作。比如&#xff0c;我们可能需要对一…

【 c 语言 】指针入门

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&…

ChatGPT编程—实现小工具软件(文件查找和筛选)

ChatGPT编程—实现小工具软件(文件查找和筛选) 今天借助[小蜜蜂AI][https://zglg.work]网站的ChatGPT编程实现一个功能&#xff1a;根据特定需求结合通配符和其他条件来进行文件查找和筛选。在这个例子中&#xff0c;我们将创建一个函数find_files&#xff0c;它接受用户输入的…

RK3568平台开发系列讲解(基础篇)内核是如何发送事件到用户空间

🚀返回专栏总目录 文章目录 一、相关接口函数二、udevadm 命令三、实验沉淀、分享、成长,让自己和他人都能有所收获!😄 一、相关接口函数 kobject_uevent 是 Linux 内核中的一个函数, 用于生成和发送 uevent 事件。 它是 udev 和其他设备管理工具与内核通信的一种方式。…

设计模式学习笔记 - 规范与重构 - 8.实践:程序出错返回啥?NULL、异常、错误吗、空对象?重构ID生成器,处理各函数的异常

概述 我们可以把函数的运行结果分为两类。一类是预期结果&#xff0c;也就是正常情况下输出的结果。一类是非预期的结果&#xff0c;也就是函数在异常&#xff08;或出错&#xff09;情况下输出的结果。 在正常情况下&#xff0c;函数返回数据的类型非常明确&#xff0c;但是…

【Spring Boot】创建你的第一个 Spring Boot 应用

创建你的第一个 Spring Boot 应用 1.环境配置2.步骤详解3.项目结构分析3.1 入口类 DemoApplication3.2 控制器 PathVariableController3.3 控制器 BasicController3.4 模型 User 4.运行 Spring Boot 目前已经成为了 Java 开发领域的框架范式。本篇博客&#xff0c;我将带领大家…

layui table列表重载后保持进度条位置不变

使用layui的table表格组件时&#xff0c;当我们操作了某行的修改后&#xff0c;刷新了页面&#xff0c;进度条则跳回到最上面。 除了layui高版本应该内置有方法解决了此问题&#xff0c;但是低版本需要另外想办法解决。 具体解决方式如下&#xff1a; 1.在编辑操作成功前&am…

【List、Set、数据结构、Collections】-Collections

day03 【List、Set、数据结构、Collections】 5.3 简述Comparable和Comparator两个接口的区别。 Comparable&#xff1a;强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序&#xff0c;类的compareTo方法被称为它的自然比较方法。只能在类中实现compareTo…

【Linux的 yum_vim工具篇】

Linux学习笔记---004 Linux的yum_vim工具篇1、Linux软件包管理器yum1.1、yum是什么&#xff1f;1.2、软件包是什么&#xff1f;软件包是谁给提供的呢&#xff1f;1.3、Linux系统(其中的centos 7)生态 2、yum的相关操作2.1、yum基本指令格式2.2、软件源 3、yum的本地配置3.1、配…

Lua-Lua与C++的交互2

Lua与C的交互是指在C程序中使用Lua本语言&#xff0c;或者在Lua脚本中调用C代码的过程。这种交互可以实现C与Lua之间的数据传递和函数调用。 在C中与Lua交互的主要步骤如下&#xff1a; 引入Lua库&#xff1a;首先需要在C程序中引入Lua的头文件和库文件&#xff0c;以便能够使…

pytorch中张量变换函数

在PyTorch中view(), transpose() 和 permute() 函数都是用于改变张量&#xff08;Tensor&#xff09;维度结构的&#xff0c;但它们的作用和使用场景有所不同。 torch.view() 功能&#xff1a;该函数用于将一个张量重塑为新的形状&#xff0c;但它必须保持原有元素数量不变。它…

【MASM汇编语言快速入门】8086MASM汇编深入理解指令对标志位的影响

8086MASM汇编深入理解指令对标志位的影响 文章目录 8086MASM汇编深入理解指令对标志位的影响0. 指令对标志位影响1. 指令对标志位影响速查表2. flags标志寄存器: 标志位含义解读flags1. 状态标志cf, pf, af, zf, sf, of2. 控制标志df, if, tf 详解&#xff1a;1. 传送指令2. 算…

如何在IDEA 中设置背景图片

在IDEA 中设置背景图片&#xff0c;可以按照以下步骤操作&#xff1a; 1、打开 IntelliJ IDEA 软件&#xff0c;进入代码编辑主界面。 点击编辑窗口上方的“File”菜单项。 2、在下拉子菜单中&#xff0c;选择“Settings”选项&#xff08;如果你使用的是 macOS&#xff0c;可…

AUTOSAR汽车电子嵌入式编程精讲300篇-车载 CAN 总线延时特性分析及优化(续)

目录 3.1.2 通信错误恢复时间 3.2 延时指标研究 3.2.1 总线 Burst 情况 3.2.2 抖动